|
@@ -23,6 +23,16 @@ struct LauncherRootView: View {
|
|
|
@AppStorage("statusBarAppIDsData") private var statusBarAppIDsData = ""
|
|
@AppStorage("statusBarAppIDsData") private var statusBarAppIDsData = ""
|
|
|
@AppStorage("widgetAppIDsData") private var widgetAppIDsData = ""
|
|
@AppStorage("widgetAppIDsData") private var widgetAppIDsData = ""
|
|
|
@AppStorage("hiddenLauncherAppIDsData") private var hiddenLauncherAppIDsData = ""
|
|
@AppStorage("hiddenLauncherAppIDsData") private var hiddenLauncherAppIDsData = ""
|
|
|
|
|
+ @AppStorage("isPremiumUser") private var isPremiumUser = false
|
|
|
|
|
+ @AppStorage("isPremiumTestMode") private var isPremiumTestMode = false
|
|
|
|
|
+
|
|
|
|
|
+ private var canAddWidget: Bool {
|
|
|
|
|
+#if DEBUG
|
|
|
|
|
+ return isPremiumUser || isPremiumTestMode
|
|
|
|
|
+#else
|
|
|
|
|
+ return isPremiumUser
|
|
|
|
|
+#endif
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
private var apps: [LauncherApp] {
|
|
private var apps: [LauncherApp] {
|
|
|
let hiddenIDs = decodeUUIDSet(from: hiddenLauncherAppIDsData)
|
|
let hiddenIDs = decodeUUIDSet(from: hiddenLauncherAppIDsData)
|
|
@@ -182,13 +192,15 @@ struct LauncherRootView: View {
|
|
|
if layoutMode == .panel {
|
|
if layoutMode == .panel {
|
|
|
IconPanelView(
|
|
IconPanelView(
|
|
|
apps: filteredApps,
|
|
apps: filteredApps,
|
|
|
|
|
+ canAddWidget: canAddWidget,
|
|
|
onAppTap: { app in
|
|
onAppTap: { app in
|
|
|
handleAppTap(app)
|
|
handleAppTap(app)
|
|
|
},
|
|
},
|
|
|
draggedAppID: $draggedAppID,
|
|
draggedAppID: $draggedAppID,
|
|
|
lastDropDestinationAppID: $lastDropDestinationAppID,
|
|
lastDropDestinationAppID: $lastDropDestinationAppID,
|
|
|
onMove: moveApp,
|
|
onMove: moveApp,
|
|
|
- onHideApp: hideApp
|
|
|
|
|
|
|
+ onHideApp: hideApp,
|
|
|
|
|
+ onPremiumRequired: { showingPremiumScreen = true }
|
|
|
)
|
|
)
|
|
|
} else {
|
|
} else {
|
|
|
ScrollView {
|
|
ScrollView {
|
|
@@ -196,8 +208,10 @@ struct LauncherRootView: View {
|
|
|
ForEach(filteredApps) { app in
|
|
ForEach(filteredApps) { app in
|
|
|
AppTileView(
|
|
AppTileView(
|
|
|
app: app,
|
|
app: app,
|
|
|
|
|
+ canAddWidget: canAddWidget,
|
|
|
onTap: { handleAppTap(app) },
|
|
onTap: { handleAppTap(app) },
|
|
|
- onHide: { hideApp(id: app.id) }
|
|
|
|
|
|
|
+ onHide: { hideApp(id: app.id) },
|
|
|
|
|
+ onPremiumRequired: { showingPremiumScreen = true }
|
|
|
)
|
|
)
|
|
|
.onDrag {
|
|
.onDrag {
|
|
|
draggedAppID = app.id
|
|
draggedAppID = app.id
|
|
@@ -505,11 +519,13 @@ private struct SearchHeader: View {
|
|
|
|
|
|
|
|
private struct IconPanelView: View {
|
|
private struct IconPanelView: View {
|
|
|
let apps: [LauncherApp]
|
|
let apps: [LauncherApp]
|
|
|
|
|
+ let canAddWidget: Bool
|
|
|
let onAppTap: (LauncherApp) -> Void
|
|
let onAppTap: (LauncherApp) -> Void
|
|
|
@Binding var draggedAppID: UUID?
|
|
@Binding var draggedAppID: UUID?
|
|
|
@Binding var lastDropDestinationAppID: UUID?
|
|
@Binding var lastDropDestinationAppID: UUID?
|
|
|
let onMove: (UUID, UUID) -> Void
|
|
let onMove: (UUID, UUID) -> Void
|
|
|
let onHideApp: (UUID) -> Void
|
|
let onHideApp: (UUID) -> Void
|
|
|
|
|
+ let onPremiumRequired: () -> Void
|
|
|
|
|
|
|
|
var body: some View {
|
|
var body: some View {
|
|
|
ScrollView {
|
|
ScrollView {
|
|
@@ -517,11 +533,13 @@ private struct IconPanelView: View {
|
|
|
ForEach(apps) { app in
|
|
ForEach(apps) { app in
|
|
|
PanelAppRowView(
|
|
PanelAppRowView(
|
|
|
app: app,
|
|
app: app,
|
|
|
|
|
+ canAddWidget: canAddWidget,
|
|
|
onAppTap: onAppTap,
|
|
onAppTap: onAppTap,
|
|
|
draggedAppID: $draggedAppID,
|
|
draggedAppID: $draggedAppID,
|
|
|
lastDropDestinationAppID: $lastDropDestinationAppID,
|
|
lastDropDestinationAppID: $lastDropDestinationAppID,
|
|
|
onMove: onMove,
|
|
onMove: onMove,
|
|
|
- onHideApp: onHideApp
|
|
|
|
|
|
|
+ onHideApp: onHideApp,
|
|
|
|
|
+ onPremiumRequired: onPremiumRequired
|
|
|
)
|
|
)
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
@@ -533,11 +551,13 @@ private struct IconPanelView: View {
|
|
|
|
|
|
|
|
private struct PanelAppRowView: View {
|
|
private struct PanelAppRowView: View {
|
|
|
let app: LauncherApp
|
|
let app: LauncherApp
|
|
|
|
|
+ let canAddWidget: Bool
|
|
|
let onAppTap: (LauncherApp) -> Void
|
|
let onAppTap: (LauncherApp) -> Void
|
|
|
@Binding var draggedAppID: UUID?
|
|
@Binding var draggedAppID: UUID?
|
|
|
@Binding var lastDropDestinationAppID: UUID?
|
|
@Binding var lastDropDestinationAppID: UUID?
|
|
|
let onMove: (UUID, UUID) -> Void
|
|
let onMove: (UUID, UUID) -> Void
|
|
|
let onHideApp: (UUID) -> Void
|
|
let onHideApp: (UUID) -> Void
|
|
|
|
|
+ let onPremiumRequired: () -> Void
|
|
|
|
|
|
|
|
@AppStorage("pinnedTileIDsData") private var pinnedTileIDsData = ""
|
|
@AppStorage("pinnedTileIDsData") private var pinnedTileIDsData = ""
|
|
|
@AppStorage("statusBarAppIDsData") private var statusBarAppIDsData = ""
|
|
@AppStorage("statusBarAppIDsData") private var statusBarAppIDsData = ""
|
|
@@ -659,9 +679,11 @@ private struct PanelAppRowView: View {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
private func addWidget() {
|
|
private func addWidget() {
|
|
|
- var updated = decodeUUIDSetGlobal(from: widgetAppIDsData)
|
|
|
|
|
- updated.insert(app.id)
|
|
|
|
|
- widgetAppIDsData = encodeUUIDSetGlobal(updated)
|
|
|
|
|
|
|
+ if canAddWidget {
|
|
|
|
|
+ var updated = decodeUUIDSetGlobal(from: widgetAppIDsData)
|
|
|
|
|
+ updated.insert(app.id)
|
|
|
|
|
+ widgetAppIDsData = encodeUUIDSetGlobal(updated)
|
|
|
|
|
+ }
|
|
|
NotificationCenter.default.post(
|
|
NotificationCenter.default.post(
|
|
|
name: .openWidgetsPage,
|
|
name: .openWidgetsPage,
|
|
|
object: nil,
|
|
object: nil,
|