diff --git a/src/App.tsx b/src/App.tsx
index fa0bcf1..0bc85c1 100644
--- a/src/App.tsx
+++ b/src/App.tsx
@@ -1,51 +1,13 @@
-import { useEffect, useState } from "react";
import "./App.css";
import { Settings } from "./components/settings/Settings";
-import {
- checkAccessibilityPermissions,
- requestAccessibilityPermissions,
-} from "tauri-plugin-macos-permissions-api";
import HandyTextLogo from "./components/icons/HandyTextLogo";
+import AccessibilityPermissions from "./components/AccessibilityPermissions";
function App() {
- const [hasAccessibility, setHasAccessibility] = useState(false);
-
- const checkPermissions = () => {
- checkAccessibilityPermissions().then((hasPermissions) => {
- if (!hasPermissions) {
- requestAccessibilityPermissions().then((permissions) => {
- setHasAccessibility(permissions);
- });
- return;
- }
- setHasAccessibility(hasPermissions);
- });
- };
-
- useEffect(() => {
- checkPermissions();
- }, []);
-
return (
-
- {!hasAccessibility && (
-
-
-
-
- Accessibility permissions are required for keyboard shortcuts.
-
-
-
-
-
- )}
+
);
diff --git a/src/components/AccessibilityPermissions.tsx b/src/components/AccessibilityPermissions.tsx
new file mode 100644
index 0000000..151a959
--- /dev/null
+++ b/src/components/AccessibilityPermissions.tsx
@@ -0,0 +1,97 @@
+import { useEffect, useState } from "react";
+import {
+ checkAccessibilityPermissions,
+ requestAccessibilityPermissions,
+} from "tauri-plugin-macos-permissions-api";
+
+// Define permission state type
+type PermissionState = "request" | "verify" | "granted";
+
+// Define button configuration type
+interface ButtonConfig {
+ text: string;
+ className: string;
+}
+
+const AccessibilityPermissions: React.FC = () => {
+ const [hasAccessibility, setHasAccessibility] = useState
(false);
+ const [permissionState, setPermissionState] =
+ useState("request");
+
+ // Check permissions without requesting
+ const checkPermissions = async (): Promise => {
+ const hasPermissions: boolean = await checkAccessibilityPermissions();
+ setHasAccessibility(hasPermissions);
+ setPermissionState(hasPermissions ? "granted" : "verify");
+ return hasPermissions;
+ };
+
+ // Handle the unified button action based on current state
+ const handleButtonClick = async (): Promise => {
+ if (permissionState === "request") {
+ try {
+ await requestAccessibilityPermissions();
+ // After system prompt, transition to verification state
+ setPermissionState("verify");
+ } catch (error) {
+ console.error("Error requesting permissions:", error);
+ setPermissionState("verify");
+ }
+ } else if (permissionState === "verify") {
+ // State is "verify" - check if permission was granted
+ await checkPermissions();
+ }
+ };
+
+ // On app boot - check permissions
+ useEffect(() => {
+ const initialSetup = async (): Promise => {
+ const hasPermissions: boolean = await checkAccessibilityPermissions();
+ setHasAccessibility(hasPermissions);
+ setPermissionState(hasPermissions ? "granted" : "request");
+ };
+
+ initialSetup();
+ }, []);
+
+ if (hasAccessibility) {
+ return null;
+ }
+
+ // Configure button text and style based on state
+ const buttonConfig: Record = {
+ request: {
+ text: "Grant",
+ className:
+ "px-2 py-1 text-sm font-semibold bg-mid-gray/10 border border-mid-gray/80 hover:bg-logo-primary/10 rounded cursor-pointer hover:border-logo-primary",
+ },
+ verify: {
+ text: "Verify",
+ className:
+ "bg-gray-100 hover:bg-gray-200 text-gray-800 font-medium py-1 px-3 rounded text-sm flex items-center justify-center cursor-pointer",
+ },
+ granted: null,
+ };
+
+ const config = buttonConfig[permissionState] as ButtonConfig;
+
+ return (
+
+
+
+
+ Please grant accessibility permissions for Handy
+
+
+
+
+
+ );
+};
+
+export default AccessibilityPermissions;
diff --git a/src/components/settings/Settings.tsx b/src/components/settings/Settings.tsx
index a0cfce8..70192b7 100644
--- a/src/components/settings/Settings.tsx
+++ b/src/components/settings/Settings.tsx
@@ -4,12 +4,10 @@ import { KeyboardShortcuts } from "./KeyboardShortcuts";
export const Settings: React.FC = () => {
return (
-
-
-
-
Keyboard Shortcuts
-
-
+
);