Compare commits

...

14 Commits

Author SHA1 Message Date
6d45ccecc2 build: Bump version to v0.0.27 2022-09-30 21:38:15 +03:00
5418c36716 feat: use patcher for resourcePatch detection (#337)
Co-authored-by: Aunali321 <aunvakil.aa@gmail.com>
2022-09-30 21:36:39 +03:00
ca0657e8f9 feat: decrease cache duration of patches and integrations. 2022-09-28 22:26:54 +05:30
a5511c2a2c feat: update unsupported button title 2022-09-26 23:36:17 +03:00
a346f8857f build: Bump version to v0.0.26 2022-09-26 16:52:04 +03:00
e12532ea4c chore: bump patcher dependency version to v5.1.0 2022-09-26 04:34:23 +02:00
afn
7ecf951bfb fix: tweak card appearances (#296)
* fix: tweak card appearances

* Update patch_selector_card.dart
2022-09-25 18:13:37 +05:30
db18874ea1 fix: now using country code for languages. 2022-09-25 14:38:25 +05:30
18a69776cd feat: en_US.json language asset file 2022-09-25 08:26:08 +02:00
21cadf6450 feat: remove en.json language asset 2022-09-25 08:22:21 +02:00
5ddbe6e252 Update Crowdin configuration file 2022-09-25 08:19:47 +02:00
afn
6d1427e01e fix: move changelog into app item custom card (#294) 2022-09-25 00:19:02 +05:30
6ac901f1d6 build: Bump version to v0.0.24 2022-09-24 13:50:44 +01:00
587ba795bb Revert "fix: Prevent content from being overlapped by system navigation bar"
This reverts commit 4d82ff3011af43f60b0ea694aaed207c6883bd8f.
2022-09-24 13:49:46 +01:00
16 changed files with 135 additions and 139 deletions

View File

@ -71,7 +71,7 @@ dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
// ReVanced // ReVanced
implementation "app.revanced:revanced-patcher:5.0.1" implementation "app.revanced:revanced-patcher:5.1.1"
// Signing & aligning // Signing & aligning
implementation("org.bouncycastle:bcpkix-jdk15on:1.70") implementation("org.bouncycastle:bcpkix-jdk15on:1.70")

View File

@ -1,5 +1,6 @@
package app.revanced.manager.flutter package app.revanced.manager.flutter
import android.os.Build
import android.os.Handler import android.os.Handler
import android.os.Looper import android.os.Looper
import androidx.annotation.NonNull import androidx.annotation.NonNull
@ -42,7 +43,6 @@ class MainActivity : FlutterActivity() {
val selectedPatches = call.argument<List<String>>("selectedPatches") val selectedPatches = call.argument<List<String>>("selectedPatches")
val cacheDirPath = call.argument<String>("cacheDirPath") val cacheDirPath = call.argument<String>("cacheDirPath")
val mergeIntegrations = call.argument<Boolean>("mergeIntegrations") val mergeIntegrations = call.argument<Boolean>("mergeIntegrations")
val resourcePatching = call.argument<Boolean>("resourcePatching")
val keyStoreFilePath = call.argument<String>("keyStoreFilePath") val keyStoreFilePath = call.argument<String>("keyStoreFilePath")
if (patchBundleFilePath != null && if (patchBundleFilePath != null &&
originalFilePath != null && originalFilePath != null &&
@ -53,7 +53,6 @@ class MainActivity : FlutterActivity() {
selectedPatches != null && selectedPatches != null &&
cacheDirPath != null && cacheDirPath != null &&
mergeIntegrations != null && mergeIntegrations != null &&
resourcePatching != null &&
keyStoreFilePath != null keyStoreFilePath != null
) { ) {
runPatcher( runPatcher(
@ -67,7 +66,6 @@ class MainActivity : FlutterActivity() {
selectedPatches, selectedPatches,
cacheDirPath, cacheDirPath,
mergeIntegrations, mergeIntegrations,
resourcePatching,
keyStoreFilePath keyStoreFilePath
) )
} else { } else {
@ -90,7 +88,6 @@ class MainActivity : FlutterActivity() {
selectedPatches: List<String>, selectedPatches: List<String>,
cacheDirPath: String, cacheDirPath: String,
mergeIntegrations: Boolean, mergeIntegrations: Boolean,
resourcePatching: Boolean,
keyStoreFilePath: String keyStoreFilePath: String
) { ) {
val originalFile = File(originalFilePath) val originalFile = File(originalFilePath)
@ -102,16 +99,20 @@ class MainActivity : FlutterActivity() {
Thread { Thread {
try { try {
val patches = DexPatchBundle( val patches = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.CUPCAKE) {
patchBundleFilePath, DexPatchBundle(
DexClassLoader(
patchBundleFilePath, patchBundleFilePath,
cacheDirPath, DexClassLoader(
null, patchBundleFilePath,
javaClass.classLoader cacheDirPath,
) null,
).loadPatches().filter { patch -> selectedPatches.any { it == patch.patchName } } javaClass.classLoader
)
).loadPatches().filter { patch -> selectedPatches.any { it == patch.patchName } }
} else {
TODO("VERSION.SDK_INT < CUPCAKE")
}
handler.post { handler.post {
installerChannel.invokeMethod( installerChannel.invokeMethod(
"update", "update",
@ -139,7 +140,6 @@ class MainActivity : FlutterActivity() {
PatcherOptions( PatcherOptions(
inputFile, inputFile,
cacheDirPath, cacheDirPath,
resourcePatching,
Aapt.binary(applicationContext).absolutePath, Aapt.binary(applicationContext).absolutePath,
cacheDirPath, cacheDirPath,
logger = ManagerLogger() logger = ManagerLogger()

View File

@ -80,7 +80,7 @@
"selectAllPatchesWarningContent": "You are about to select all patches, that includes unrecommended patches and can cause unwanted behavior." "selectAllPatchesWarningContent": "You are about to select all patches, that includes unrecommended patches and can cause unwanted behavior."
}, },
"patchItem": { "patchItem": {
"unsupportedWarningButton": "Unsupported version", "unsupportedWarningButton": "Warning",
"unsupportedDialogTitle": "Warning", "unsupportedDialogTitle": "Warning",
"unsupportedDialogText": "Selecting this patch may result in patching errors.\n\nApp version: {packageVersion}\nCurrent supported versions:\n{supportedVersions}" "unsupportedDialogText": "Selecting this patch may result in patching errors.\n\nApp version: {packageVersion}\nCurrent supported versions:\n{supportedVersions}"
}, },
@ -115,8 +115,8 @@
"frenchOption": "French", "frenchOption": "French",
"sourcesLabel": "Sources", "sourcesLabel": "Sources",
"sourcesLabelHint": "Configure your custom sources", "sourcesLabelHint": "Configure your custom sources",
"orgPatchesLabel" : "Patches Organization", "orgPatchesLabel": "Patches Organization",
"sourcesPatchesLabel" : "Patches Source", "sourcesPatchesLabel": "Patches Source",
"orgIntegrationsLabel": "Integrations Organization", "orgIntegrationsLabel": "Integrations Organization",
"sourcesIntegrationsLabel": "Integrations Source", "sourcesIntegrationsLabel": "Integrations Source",
"sourcesResetDialogTitle": "Reset", "sourcesResetDialogTitle": "Reset",

View File

@ -1,3 +1,3 @@
files: files:
- source: /assets/i18n/en.json - source: /assets/i18n/en.json
translation: /assets/i18n/%two_letters_code%.json translation: /assets/i18n/%locale_with_underscore%.json

View File

@ -35,7 +35,7 @@ class MyApp extends StatelessWidget {
localizationsDelegates: [ localizationsDelegates: [
FlutterI18nDelegate( FlutterI18nDelegate(
translationLoader: FileTranslationLoader( translationLoader: FileTranslationLoader(
fallbackFile: 'en', fallbackFile: 'en_US',
basePath: 'assets/i18n', basePath: 'assets/i18n',
), ),
), ),

View File

@ -20,8 +20,8 @@ class GithubAPI {
); );
final DioCacheManager _dioCacheManager = DioCacheManager(CacheConfig()); final DioCacheManager _dioCacheManager = DioCacheManager(CacheConfig());
final Options _cacheOptions = buildCacheOptions( final Options _cacheOptions = buildCacheOptions(
const Duration(days: 1), const Duration(hours: 6),
maxStale: const Duration(days: 7), maxStale: const Duration(days: 1),
); );
final Map<String, String> repoAppPath = { final Map<String, String> repoAppPath = {
'com.google.android.youtube': 'youtube', 'com.google.android.youtube': 'youtube',

View File

@ -142,7 +142,6 @@ class PatcherAPI {
List<Patch> selectedPatches, List<Patch> selectedPatches,
) async { ) async {
bool mergeIntegrations = await needsIntegrations(selectedPatches); bool mergeIntegrations = await needsIntegrations(selectedPatches);
bool resourcePatching = await needsResourcePatching(selectedPatches);
bool includeSettings = await needsSettingsPatch(selectedPatches); bool includeSettings = await needsSettingsPatch(selectedPatches);
if (includeSettings) { if (includeSettings) {
try { try {
@ -186,7 +185,6 @@ class PatcherAPI {
'selectedPatches': selectedPatches.map((p) => p.name).toList(), 'selectedPatches': selectedPatches.map((p) => p.name).toList(),
'cacheDirPath': cacheDir.path, 'cacheDirPath': cacheDir.path,
'mergeIntegrations': mergeIntegrations, 'mergeIntegrations': mergeIntegrations,
'resourcePatching': resourcePatching,
'keyStoreFilePath': _keyStoreFile.path, 'keyStoreFilePath': _keyStoreFile.path,
}, },
); );

View File

@ -13,8 +13,8 @@ class RevancedAPI {
late Dio _dio = Dio(); late Dio _dio = Dio();
final DioCacheManager _dioCacheManager = DioCacheManager(CacheConfig()); final DioCacheManager _dioCacheManager = DioCacheManager(CacheConfig());
final Options _cacheOptions = buildCacheOptions( final Options _cacheOptions = buildCacheOptions(
const Duration(days: 1), const Duration(hours: 6),
maxStale: const Duration(days: 7), maxStale: const Duration(days: 1),
); );
Future<void> initialize(String apiUrl) async { Future<void> initialize(String apiUrl) async {

View File

@ -32,6 +32,7 @@ class NavigationViewModel extends IndexTrackingViewModel {
await prefs.setBool('useDarkTheme', isDark); await prefs.setBool('useDarkTheme', isDark);
await DynamicTheme.of(context)!.setTheme(isDark ? 1 : 0); await DynamicTheme.of(context)!.setTheme(isDark ? 1 : 0);
} }
SystemChrome.setEnabledSystemUIMode(SystemUiMode.edgeToEdge);
SystemChrome.setSystemUIOverlayStyle( SystemChrome.setSystemUIOverlayStyle(
SystemUiOverlayStyle( SystemUiOverlayStyle(
systemNavigationBarColor: Colors.transparent, systemNavigationBarColor: Colors.transparent,

View File

@ -33,7 +33,7 @@ class _ContributorsCardState extends State<ContributorsCard> {
'', '',
style: TextStyle( style: TextStyle(
fontSize: 20, fontSize: 20,
fontWeight: FontWeight.w600, fontWeight: FontWeight.w500,
), ),
), ),
), ),

View File

@ -49,7 +49,7 @@ class _LatestCommitCardState extends State<LatestCommitCard> {
), ),
], ],
), ),
const SizedBox(height: 8), const SizedBox(height: 4),
Row( Row(
children: <Widget>[ children: <Widget>[
I18nText('latestCommitCard.managerLabel'), I18nText('latestCommitCard.managerLabel'),

View File

@ -32,7 +32,7 @@ class AppSelectorCard extends StatelessWidget {
), ),
), ),
), ),
const SizedBox(height: 10), const SizedBox(height: 8),
locator<PatcherViewModel>().selectedApp == null locator<PatcherViewModel>().selectedApp == null
? I18nText('appSelectorCard.widgetSubtitle') ? I18nText('appSelectorCard.widgetSubtitle')
: Row( : Row(
@ -49,21 +49,21 @@ class AppSelectorCard extends StatelessWidget {
), ),
), ),
const SizedBox(width: 6), const SizedBox(width: 6),
Text(locator<PatcherViewModel>().getAppSelectionString()), Text(
locator<PatcherViewModel>()
.getAppSelectionString(),
style: const TextStyle(fontWeight: FontWeight.w600),
),
], ],
), ),
locator<PatcherViewModel>().selectedApp == null locator<PatcherViewModel>().selectedApp == null
? Container() ? Container()
: Column( : Column(
children: [ children: [
const SizedBox(height: 10), const SizedBox(height: 4),
Padding( Text(
padding: const EdgeInsets.only(left: 20), locator<PatcherViewModel>()
child: Text( .getRecommendedVersionString(context),
locator<PatcherViewModel>()
.getRecommendedVersionString(context),
style: const TextStyle(fontStyle: FontStyle.italic),
),
), ),
], ],
), ),

View File

@ -32,7 +32,7 @@ class PatchSelectorCard extends StatelessWidget {
), ),
), ),
), ),
const SizedBox(height: 10), const SizedBox(height: 4),
locator<PatcherViewModel>().selectedApp == null locator<PatcherViewModel>().selectedApp == null
? I18nText('patchSelectorCard.widgetSubtitle') ? I18nText('patchSelectorCard.widgetSubtitle')
: locator<PatcherViewModel>().selectedPatches.isEmpty : locator<PatcherViewModel>().selectedPatches.isEmpty
@ -46,7 +46,7 @@ class PatchSelectorCard extends StatelessWidget {
String _getPatchesSelection() { String _getPatchesSelection() {
String text = ''; String text = '';
for (Patch p in locator<PatcherViewModel>().selectedPatches) { for (Patch p in locator<PatcherViewModel>().selectedPatches) {
text += '${p.getSimpleName()} (v${p.version})\n'; text += '\u2022 ${p.getSimpleName()} (v${p.version})\n';
} }
return text.substring(0, text.length - 1); return text.substring(0, text.length - 1);
} }

View File

@ -65,21 +65,14 @@ class _PatchItemState extends State<PatchItem> {
fontWeight: FontWeight.w600, fontWeight: FontWeight.w600,
), ),
), ),
const SizedBox(width: 4), const SizedBox(width: 6),
Container( Text(
padding: const EdgeInsets.symmetric( widget.version,
horizontal: 4, style: TextStyle(
vertical: 2, fontSize: 16,
color: Theme.of(context).colorScheme.secondary,
), ),
decoration: BoxDecoration( ),
color: Theme.of(context)
.colorScheme
.background
.withOpacity(0.5),
borderRadius: BorderRadius.circular(6),
),
child: Text(widget.version),
)
], ],
), ),
const SizedBox(height: 4), const SizedBox(height: 4),
@ -88,7 +81,10 @@ class _PatchItemState extends State<PatchItem> {
softWrap: true, softWrap: true,
maxLines: 3, maxLines: 3,
overflow: TextOverflow.visible, overflow: TextOverflow.visible,
style: const TextStyle(fontSize: 14), style: TextStyle(
fontSize: 14,
color: Theme.of(context).colorScheme.onSecondaryContainer,
),
), ),
], ],
), ),
@ -119,12 +115,12 @@ class _PatchItemState extends State<PatchItem> {
padding: const EdgeInsets.only(top: 8), padding: const EdgeInsets.only(top: 8),
child: TextButton.icon( child: TextButton.icon(
label: I18nText('patchItem.unsupportedWarningButton'), label: I18nText('patchItem.unsupportedWarningButton'),
icon: const Icon(Icons.warning), icon: const Icon(Icons.warning, size: 20.0),
onPressed: () => _showUnsupportedWarningDialog(), onPressed: () => _showUnsupportedWarningDialog(),
style: ButtonStyle( style: ButtonStyle(
shape: MaterialStateProperty.all( shape: MaterialStateProperty.all(
RoundedRectangleBorder( RoundedRectangleBorder(
borderRadius: BorderRadius.circular(12), borderRadius: BorderRadius.circular(8),
side: BorderSide( side: BorderSide(
width: 1, width: 1,
color: color:

View File

@ -50,93 +50,94 @@ class _ApplicationItemState extends State<ApplicationItem>
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
ExpandableController expController = ExpandableController(); ExpandableController expController = ExpandableController();
return ExpandablePanel( return Container(
controller: expController, margin: const EdgeInsets.only(bottom: 16.0),
theme: const ExpandableThemeData( child: CustomCard(
inkWellBorderRadius: BorderRadius.all(Radius.circular(16)), onTap: () {
tapBodyToCollapse: false, expController.toggle();
tapBodyToExpand: false, _animationController.isCompleted
tapHeaderToExpand: false, ? _animationController.reverse()
hasIcon: false, : _animationController.forward();
animationDuration: Duration(milliseconds: 450), },
), child: ExpandablePanel(
header: Padding( controller: expController,
padding: const EdgeInsets.only(bottom: 16.0), theme: const ExpandableThemeData(
child: CustomCard( inkWellBorderRadius: BorderRadius.all(Radius.circular(16)),
onTap: () { tapBodyToCollapse: false,
expController.toggle(); tapBodyToExpand: false,
_animationController.isCompleted tapHeaderToExpand: false,
? _animationController.reverse() hasIcon: false,
: _animationController.forward(); animationDuration: Duration(milliseconds: 450),
}, ),
child: Row( header: Row(
children: <Widget>[
SizedBox(
width: 40,
child: Image.memory(widget.icon, height: 40, width: 40),
),
const SizedBox(width: 4),
Padding(
padding: const EdgeInsets.only(left: 15.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Text(
widget.name.length > 9
? '${widget.name.substring(0, 9)}...'
: widget.name,
style: const TextStyle(
fontSize: 16,
fontWeight: FontWeight.w500,
),
),
Text(format(widget.patchDate)),
],
),
),
const Spacer(),
RotationTransition(
turns:
Tween(begin: 0.0, end: 0.50).animate(_animationController),
child: const Padding(
padding: EdgeInsets.all(8.0),
child: Icon(Icons.arrow_drop_down),
),
),
Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.end,
children: <Widget>[ children: <Widget>[
CustomMaterialButton( SizedBox(
label: widget.isUpdatableApp width: 40,
? I18nText('applicationItem.patchButton') child: Image.memory(widget.icon, height: 40, width: 40),
: I18nText('applicationItem.infoButton'), ),
onPressed: widget.onPressed, const SizedBox(width: 4),
Padding(
padding: const EdgeInsets.only(left: 15.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Text(
widget.name.length > 12
? '${widget.name.substring(0, 12)}...'
: widget.name,
style: const TextStyle(
fontSize: 16,
fontWeight: FontWeight.w500,
),
),
Text(format(widget.patchDate)),
],
),
),
const Spacer(),
RotationTransition(
turns: Tween(begin: 0.0, end: 0.50)
.animate(_animationController),
child: const Padding(
padding: EdgeInsets.all(8.0),
child: Icon(Icons.arrow_drop_down),
),
),
const SizedBox(width: 8),
Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.end,
children: <Widget>[
CustomMaterialButton(
label: widget.isUpdatableApp
? I18nText('applicationItem.patchButton')
: I18nText('applicationItem.infoButton'),
onPressed: widget.onPressed,
),
],
), ),
], ],
), ),
], collapsed: const SizedBox(),
expanded: Padding(
padding: const EdgeInsets.only(top: 16.0, left: 4.0, right: 4.0, bottom: 4.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
I18nText(
'applicationItem.changelogLabel',
child: const Text(
'',
style: TextStyle(fontWeight: FontWeight.w700),
),
),
const SizedBox(height: 4),
Text('\u2022 ${widget.changelog.join('\n\u2022 ')}'),
],
),
), ),
), ),
), )
collapsed: const SizedBox(),
expanded: Padding(
padding: const EdgeInsets.all(16.0).copyWith(top: 0.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
I18nText(
'applicationItem.changelogLabel',
child: const Text(
'',
style: TextStyle(fontWeight: FontWeight.w700),
),
),
const SizedBox(height: 4),
Text('\u2022 ${widget.changelog.join('\n\u2022 ')}'),
],
),
),
); );
} }
} }

View File

@ -4,7 +4,7 @@ homepage: https://github.com/revanced/revanced-manager
publish_to: 'none' publish_to: 'none'
version: 0.0.23+23 version: 0.0.27+27
environment: environment:
sdk: ">=2.17.5 <3.0.0" sdk: ">=2.17.5 <3.0.0"