mirror of
https://github.com/revanced/revanced-manager.git
synced 2025-06-12 04:37:37 +02:00
fix: add changelog (wip) on each app item
This commit is contained in:
@ -35,8 +35,6 @@ class AppSelectorViewModel extends BaseViewModel {
|
||||
icon: application.icon,
|
||||
patchDate: DateTime.now(),
|
||||
isRooted: _isRooted,
|
||||
isFromStorage: false,
|
||||
appliedPatches: [],
|
||||
);
|
||||
locator<PatcherViewModel>().selectedPatches.clear();
|
||||
locator<PatcherViewModel>().notifyListeners();
|
||||
@ -63,7 +61,6 @@ class AppSelectorViewModel extends BaseViewModel {
|
||||
patchDate: DateTime.now(),
|
||||
isRooted: _isRooted,
|
||||
isFromStorage: true,
|
||||
appliedPatches: [],
|
||||
);
|
||||
locator<PatcherViewModel>().selectedPatches.clear();
|
||||
locator<PatcherViewModel>().notifyListeners();
|
||||
|
@ -111,8 +111,8 @@ class HomeView extends StatelessWidget {
|
||||
),
|
||||
const SizedBox(height: 14),
|
||||
model.showUpdatableApps
|
||||
? AvailableUpdatesCard()
|
||||
: InstalledAppsCard()
|
||||
? const AvailableUpdatesCard()
|
||||
: const InstalledAppsCard()
|
||||
],
|
||||
),
|
||||
),
|
||||
|
@ -22,8 +22,11 @@ class HomeViewModel extends BaseViewModel {
|
||||
final FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin =
|
||||
FlutterLocalNotificationsPlugin();
|
||||
bool showUpdatableApps = true;
|
||||
List<PatchedApplication> patchedInstalledApps = [];
|
||||
List<PatchedApplication> patchedUpdatableApps = [];
|
||||
|
||||
Future<void> initialize() async {
|
||||
await _getPatchedApps();
|
||||
await _patcherAPI.loadPatches();
|
||||
await flutterLocalNotificationsPlugin.initialize(
|
||||
const InitializationSettings(
|
||||
@ -31,6 +34,7 @@ class HomeViewModel extends BaseViewModel {
|
||||
),
|
||||
onSelectNotification: (p) => DeviceApps.openApp('app.revanced.manager'),
|
||||
);
|
||||
_managerAPI.reAssessSavedApps().then((_) => notifyListeners());
|
||||
}
|
||||
|
||||
void toggleUpdatableApps(bool value) {
|
||||
@ -46,17 +50,16 @@ class HomeViewModel extends BaseViewModel {
|
||||
locator<MainViewModel>().setIndex(1);
|
||||
}
|
||||
|
||||
Future<List<PatchedApplication>> getPatchedApps(bool isUpdatable) async {
|
||||
await _managerAPI.reAssessSavedApps();
|
||||
List<PatchedApplication> list = [];
|
||||
List<PatchedApplication> patchedApps = _managerAPI.getPatchedApps();
|
||||
for (PatchedApplication app in patchedApps) {
|
||||
bool hasUpdates = await _managerAPI.hasAppUpdates(app.packageName);
|
||||
if (hasUpdates == isUpdatable) {
|
||||
list.add(app);
|
||||
}
|
||||
}
|
||||
return list;
|
||||
Future<void> _getPatchedApps() async {
|
||||
patchedInstalledApps = _managerAPI
|
||||
.getPatchedApps()
|
||||
.where((app) => app.hasUpdates == false)
|
||||
.toList();
|
||||
patchedUpdatableApps = _managerAPI
|
||||
.getPatchedApps()
|
||||
.where((app) => app.hasUpdates == true)
|
||||
.toList();
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
Future<bool> hasManagerUpdates() async {
|
||||
|
@ -70,10 +70,10 @@ class InstallerViewModel extends BaseViewModel {
|
||||
|
||||
void update(double value, String header, String log) {
|
||||
progress = value;
|
||||
isInstalled = false;
|
||||
isPatching = progress == 1.0 ? false : true;
|
||||
if (progress == 0.0) {
|
||||
logs = '';
|
||||
isInstalled = false;
|
||||
}
|
||||
if (header.isNotEmpty) {
|
||||
headerLogs = header;
|
||||
@ -148,9 +148,9 @@ class InstallerViewModel extends BaseViewModel {
|
||||
);
|
||||
isInstalled = await _patcherAPI.installPatchedFile(_app!);
|
||||
if (isInstalled) {
|
||||
update(1.0, 'Installed!', 'Installed');
|
||||
update(1.0, 'Installed!', 'Installed!');
|
||||
_app!.patchDate = DateTime.now();
|
||||
_app!.appliedPatches.addAll(_patches.map((p) => p.name).toList());
|
||||
_app!.appliedPatches = _patches.map((p) => p.name).toList();
|
||||
_managerAPI.savePatchedApp(_app!);
|
||||
} else {
|
||||
update(1.0, 'Aborting...', 'An error occurred! Aborting');
|
||||
|
@ -1,54 +1,32 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:revanced_manager/app/app.locator.dart';
|
||||
import 'package:revanced_manager/models/patched_application.dart';
|
||||
import 'package:revanced_manager/services/manager_api.dart';
|
||||
import 'package:revanced_manager/ui/views/home/home_viewmodel.dart';
|
||||
import 'package:revanced_manager/ui/widgets/shared/application_item.dart';
|
||||
|
||||
class AvailableUpdatesCard extends StatelessWidget {
|
||||
AvailableUpdatesCard({
|
||||
const AvailableUpdatesCard({
|
||||
Key? key,
|
||||
}) : super(key: key);
|
||||
|
||||
final ManagerAPI _managerAPI = locator<ManagerAPI>();
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
mainAxisAlignment: MainAxisAlignment.start,
|
||||
children: [
|
||||
FutureBuilder<List<PatchedApplication>>(
|
||||
future: locator<HomeViewModel>().getPatchedApps(true),
|
||||
builder: (context, snapshot) => snapshot.hasData &&
|
||||
snapshot.data!.isNotEmpty
|
||||
? ListView.builder(
|
||||
shrinkWrap: true,
|
||||
physics: const NeverScrollableScrollPhysics(),
|
||||
padding: EdgeInsets.zero,
|
||||
itemCount: snapshot.data!.length,
|
||||
itemBuilder: (context, index) => FutureBuilder<List<String>>(
|
||||
future: _managerAPI.getAppChangelog(
|
||||
snapshot.data![index].packageName,
|
||||
snapshot.data![index].patchDate,
|
||||
),
|
||||
initialData: List.empty(),
|
||||
builder: (context, snapshot2) => ApplicationItem(
|
||||
icon: snapshot.data![index].icon,
|
||||
name: snapshot.data![index].name,
|
||||
patchDate: snapshot.data![index].patchDate,
|
||||
changelog: '${snapshot2.data!.join('\n')}\n...',
|
||||
isUpdatableApp: true,
|
||||
onPressed: () =>
|
||||
locator<HomeViewModel>().navigateToPatcher(
|
||||
snapshot.data![index],
|
||||
),
|
||||
),
|
||||
),
|
||||
)
|
||||
: Container(),
|
||||
),
|
||||
],
|
||||
return ListView(
|
||||
shrinkWrap: true,
|
||||
padding: EdgeInsets.zero,
|
||||
physics: const NeverScrollableScrollPhysics(),
|
||||
children: locator<HomeViewModel>()
|
||||
.patchedUpdatableApps
|
||||
.map((app) => ApplicationItem(
|
||||
icon: app.icon,
|
||||
name: app.name,
|
||||
patchDate: app.patchDate,
|
||||
changelog: app.changelog,
|
||||
isUpdatableApp: true,
|
||||
onPressed: () => locator<HomeViewModel>().navigateToPatcher(
|
||||
app,
|
||||
),
|
||||
))
|
||||
.toList(),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -1,54 +1,31 @@
|
||||
import 'package:device_apps/device_apps.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:revanced_manager/app/app.locator.dart';
|
||||
import 'package:revanced_manager/models/patched_application.dart';
|
||||
import 'package:revanced_manager/services/manager_api.dart';
|
||||
import 'package:revanced_manager/ui/views/home/home_viewmodel.dart';
|
||||
import 'package:revanced_manager/ui/widgets/shared/application_item.dart';
|
||||
|
||||
class InstalledAppsCard extends StatelessWidget {
|
||||
InstalledAppsCard({
|
||||
const InstalledAppsCard({
|
||||
Key? key,
|
||||
}) : super(key: key);
|
||||
|
||||
final ManagerAPI _managerAPI = locator<ManagerAPI>();
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
mainAxisAlignment: MainAxisAlignment.start,
|
||||
children: [
|
||||
FutureBuilder<List<PatchedApplication>>(
|
||||
future: locator<HomeViewModel>().getPatchedApps(false),
|
||||
builder: (context, snapshot) => snapshot.hasData &&
|
||||
snapshot.data!.isNotEmpty
|
||||
? ListView.builder(
|
||||
shrinkWrap: true,
|
||||
physics: const NeverScrollableScrollPhysics(),
|
||||
padding: EdgeInsets.zero,
|
||||
itemCount: snapshot.data!.length,
|
||||
itemBuilder: (context, index) => FutureBuilder<List<String>>(
|
||||
future: _managerAPI.getAppChangelog(
|
||||
snapshot.data![index].packageName,
|
||||
snapshot.data![index].patchDate,
|
||||
),
|
||||
initialData: const ['Loading'],
|
||||
builder: (context, snapshot2) => ApplicationItem(
|
||||
icon: snapshot.data![index].icon,
|
||||
name: snapshot.data![index].name,
|
||||
patchDate: snapshot.data![index].patchDate,
|
||||
changelog: '${snapshot2.data!.join('\n')}\n(...)',
|
||||
isUpdatableApp: false,
|
||||
onPressed: () => DeviceApps.openApp(
|
||||
snapshot.data![index].packageName,
|
||||
),
|
||||
),
|
||||
),
|
||||
)
|
||||
: Container(),
|
||||
),
|
||||
],
|
||||
return ListView(
|
||||
shrinkWrap: true,
|
||||
padding: EdgeInsets.zero,
|
||||
physics: const NeverScrollableScrollPhysics(),
|
||||
children: locator<HomeViewModel>()
|
||||
.patchedInstalledApps
|
||||
.map((app) => ApplicationItem(
|
||||
icon: app.icon,
|
||||
name: app.name,
|
||||
patchDate: app.patchDate,
|
||||
changelog: app.changelog,
|
||||
isUpdatableApp: false,
|
||||
onPressed: () => DeviceApps.openApp(app.packageName),
|
||||
))
|
||||
.toList(),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -12,7 +12,7 @@ class ApplicationItem extends StatelessWidget {
|
||||
final Uint8List icon;
|
||||
final String name;
|
||||
final DateTime patchDate;
|
||||
final String changelog;
|
||||
final List<String> changelog;
|
||||
final bool isUpdatableApp;
|
||||
final Function() onPressed;
|
||||
|
||||
@ -103,8 +103,9 @@ class ApplicationItem extends StatelessWidget {
|
||||
style: kRobotoTextStyle.copyWith(fontWeight: FontWeight.w700),
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 4),
|
||||
Text(
|
||||
changelog,
|
||||
' - ${changelog.join('\n- ')}',
|
||||
style: kRobotoTextStyle,
|
||||
),
|
||||
],
|
||||
|
Reference in New Issue
Block a user