Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
# Adopt Hilt Dependency Injection for Android Component Lifecycle Management: Activities Extending Componentactivity

These rules are ALWAYS ACTIVE for all Android Activities extending ComponentActivity or AppCompatActivity, Android ViewModels, and the Android Application class within the scope of authentication, autofill, and credential provider flows.

### Rules

- **R-HILT-001** SHOULD: Activities extending ComponentActivity or AppCompatActivity SHOULD use @AndroidEntryPoint for lifecycle-aware injection.
- **R-HILT-002** SHOULD: All ViewModel classes requiring dependency injection SHOULD be annotated with @HiltViewModel.
- **R-HILT-003** SHOULD: The Application class SHOULD use @Inject for application-scoped dependencies.
- **R-HILT-004** SHOULD: Use androidx.activity.viewModels() delegate for ViewModel injection in Activities annotated with @AndroidEntryPoint.
- **R-HILT-005** SHOULD: Follow Hilt scoping guidelines: @Singleton for application-wide, @ActivityScoped for Activity lifecycle, @ViewModelScoped for ViewModel lifecycle.
- **R-HILT-006** SHOULD: Create Hilt modules for dependencies that cannot use constructor injection (interfaces, third-party classes, Android framework types).

### Verify

```bash
# Count @AndroidEntryPoint annotations on Activity classes
grep -r "@AndroidEntryPoint" app/src/main/kotlin --include="*Activity.kt" | wc -l

# Count @HiltViewModel annotations on ViewModel classes
grep -r "@HiltViewModel" app/src/main/kotlin --include="*ViewModel.kt" | wc -l

# Verify @Inject usage in Application class
grep -r "@Inject" app/src/main/kotlin/com/x8bit/bitwarden/BitwardenApplication.kt
```

**Accept when:**
- All Activity classes requiring dependency injection are annotated with @AndroidEntryPoint
- All ViewModel classes requiring dependency injection are annotated with @HiltViewModel
- The Application class uses @Inject for application-scoped dependencies
- Verification commands return non-zero counts indicating Hilt annotation presence
- Annotation processing completes successfully in CI build pipeline
- No manual dependency construction exists in Android components (Activities, ViewModels, Application)

<enforcement>
Claude Code MUST NOT skip or defer verification. All Activities, ViewModels, and Application classes in scope MUST be checked for proper Hilt annotations. Build failures from annotation processing errors MUST be resolved before merge. Code review MUST enforce Hilt annotation requirements on new Android components.
</enforcement>
42 changes: 42 additions & 0 deletions .actual/rules/cross-cutting-activities-handling-system-ddfe.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
# Adopt Android Activity and AndroidX ComponentActivity as Application Entry Points: Activities Handling System

These rules are ALWAYS ACTIVE for all Activity and ViewModel implementations serving as application entry points, including credential provider flows, OAuth callbacks, autofill callbacks, and main application UI.

### Rules

- **R-ACT-001** MUST: All Activity subclasses serving as application entry points SHALL extend either `androidx.activity.ComponentActivity` or `androidx.appcompat.app.AppCompatActivity`.
- **R-ACT-002** MUST: All Activity classes requiring dependency injection SHALL be annotated with `@AndroidEntryPoint`.
- **R-ACT-003** MUST: All ViewModel classes paired with Activities SHALL be annotated with `@HiltViewModel`.
- **R-ACT-004** MUST: ViewModel instances SHALL be obtained through `androidx.activity.viewModels()` delegation in Activity implementations.
- **R-ACT-005** SHOULD: Activities handling system callbacks SHOULD implement specialized flows for credential provider (CredentialProviderActivity), authentication (AuthCallbackActivity), and autofill (AutofillCallbackActivity) to maintain separation of concerns.
- **R-ACT-006** SHOULD: Intent handling logic SHOULD be implemented in `onCreate` and `onNewIntent` methods, routing Intent data to ViewModel through sealed action classes.
- **R-ACT-007** SHOULD: Activity entry points SHOULD be declared in AndroidManifest.xml with appropriate intent filters for system integration (credential provider, autofill, OAuth callback schemes).
- **R-ACT-008** SHOULD: ViewModel implementations SHOULD extend BaseViewModel as common parent class to standardize state management patterns and lifecycle handling.
- **R-ACT-009** MAY: Legacy Activity implementations may temporarily use `android.app.Activity` base class during migration to AndroidX (EXC-001).

### Verify

```bash
# Verify Activity base class inheritance
grep -r "extends ComponentActivity\|extends AppCompatActivity" app/src/main/kotlin --include="*Activity.kt" | wc -l

# Verify @AndroidEntryPoint annotation on Activities
grep -r "@AndroidEntryPoint" app/src/main/kotlin --include="*Activity.kt" | wc -l

# Verify @HiltViewModel annotation on ViewModels
grep -r "@HiltViewModel" app/src/main/kotlin --include="*ViewModel.kt" | wc -l

# Verify androidx.activity.viewModels delegation usage
grep -r "androidx.activity.viewModels" app/src/main/kotlin --include="*Activity.kt" | wc -l
```

**Accept when:**
- All Activity classes extend either `androidx.activity.ComponentActivity` or `androidx.appcompat.app.AppCompatActivity`
- All Activity classes requiring dependency injection are annotated with `@AndroidEntryPoint`
- All ViewModel classes are annotated with `@HiltViewModel` and obtained through `androidx.activity.viewModels()` delegation
- Specialized Activity implementations exist for distinct system integration points (credential provider, auth callback, autofill callback, main UI)
- Activity entry points are declared in AndroidManifest.xml with appropriate intent filters

<enforcement>
Claude Code MUST NOT skip or defer verification. Static analysis scanning for Activity base class inheritance patterns, lint rules checking @AndroidEntryPoint annotation presence, code review verification of ViewModel instantiation, and CI pipeline checks for AndroidManifest Activity declarations are mandatory. Violations result in CI build failure, lint warnings escalated to errors, and code review blocks. Exceptions require architecture team approval and tracking issues with migration plans.
</enforcement>
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
# Adopt Android Activity and AndroidX ComponentActivity as Application Entry Points: Activities Requiring Dependency

These rules are ALWAYS ACTIVE for all Activity and ViewModel implementations serving as application entry points, including credential provider flows, OAuth callbacks, autofill callbacks, and main application UI.

### Rules

- **R-ACTIVITY-001** MUST: Activities requiring dependency injection MUST be annotated with @AndroidEntryPoint to enable Hilt code generation and injection lifecycle.
- **R-ACTIVITY-002** MUST: All Activity classes serving as application entry points MUST extend either androidx.activity.ComponentActivity or androidx.appcompat.app.AppCompatActivity.
- **R-ACTIVITY-003** MUST: All ViewModel classes paired with Activities MUST be annotated with @HiltViewModel.
- **R-ACTIVITY-004** MUST: ViewModel instances MUST be obtained through androidx.activity.viewModels() delegation in Activity implementations.
- **R-ACTIVITY-005** MUST: Intent handling MUST be implemented in onCreate and onNewIntent methods, routing Intent data to ViewModel through sealed action classes.
- **R-ACTIVITY-006** MUST: Specialized Activity implementations MUST exist for distinct system integration points (credential provider, auth callback, autofill callback, main UI).
- **R-ACTIVITY-007** SHOULD: Activity entry points SHOULD be declared in AndroidManifest.xml with appropriate intent filters for system integration.
- **R-ACTIVITY-008** SHOULD: ViewModels SHOULD extend BaseViewModel as common parent class to standardize state management patterns and lifecycle handling.

### Verify

```bash
# Count Activity classes extending approved AndroidX base classes
grep -r "extends ComponentActivity\|extends AppCompatActivity" app/src/main/kotlin --include="*Activity.kt" | wc -l

# Count Activity classes annotated with @AndroidEntryPoint
grep -r "@AndroidEntryPoint" app/src/main/kotlin --include="*Activity.kt" | wc -l

# Count ViewModel classes annotated with @HiltViewModel
grep -r "@HiltViewModel" app/src/main/kotlin --include="*ViewModel.kt" | wc -l

# Count Activity classes using androidx.activity.viewModels delegation
grep -r "androidx.activity.viewModels" app/src/main/kotlin --include="*Activity.kt" | wc -l
```

**Accept when:**
- All Activity classes extend either androidx.activity.ComponentActivity or androidx.appcompat.app.AppCompatActivity
- All Activity classes requiring dependency injection are annotated with @AndroidEntryPoint
- All ViewModel classes are annotated with @HiltViewModel and obtained through androidx.activity.viewModels delegation
- Specialized Activity implementations exist for distinct system integration points (credential provider, auth callback, autofill callback, main UI)
- Intent handling is implemented in onCreate and onNewIntent methods with routing to ViewModel through sealed action classes
- Activity entry points are declared in AndroidManifest.xml with appropriate intent filters

<enforcement>
Claude Code MUST NOT skip or defer verification. All Activity and ViewModel implementations MUST comply with R-ACTIVITY-001 through R-ACTIVITY-008. Violations block CI pipeline builds and require architecture team approval for exceptions.
</enforcement>
33 changes: 33 additions & 0 deletions .actual/rules/cross-cutting-activities-use-androidx-9fdc.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
# Adopt Android Activity and AndroidX ComponentActivity as Application Entry Points: Activities Use Androidx

These rules are ALWAYS ACTIVE for all Activity and ViewModel implementations serving as application entry points, including credential provider flows, OAuth callbacks, autofill callbacks, and main application UI.

### Rules

- **R-ACT-001** SHOULD: Activities SHOULD use androidx.activity.viewModels delegation for ViewModel instantiation to ensure proper lifecycle scoping and configuration change survival.

### Verify

```bash
# Count Activity classes extending AndroidX base classes
grep -r "extends ComponentActivity\|extends AppCompatActivity" app/src/main/kotlin --include="*Activity.kt" | wc -l

# Count Activity classes annotated with @AndroidEntryPoint
grep -r "@AndroidEntryPoint" app/src/main/kotlin --include="*Activity.kt" | wc -l

# Count ViewModel classes annotated with @HiltViewModel
grep -r "@HiltViewModel" app/src/main/kotlin --include="*ViewModel.kt" | wc -l

# Count ViewModel instantiations using androidx.activity.viewModels delegation
grep -r "androidx.activity.viewModels" app/src/main/kotlin --include="*Activity.kt" | wc -l
```

**Accept when:**
- All Activity classes extend either androidx.activity.ComponentActivity or androidx.appcompat.app.AppCompatActivity
- All Activity classes requiring dependency injection are annotated with @AndroidEntryPoint
- All ViewModel classes are annotated with @HiltViewModel and obtained through androidx.activity.viewModels delegation
- Specialized Activity implementations exist for distinct system integration points (credential provider, auth callback, autofill callback, main UI)

<enforcement>
Claude Code MUST NOT skip or defer verification. Static analysis scanning for Activity base class inheritance patterns, lint rules checking @AndroidEntryPoint annotation presence, code review verification of ViewModel instantiation, and CI pipeline checks for AndroidManifest Activity declarations are mandatory. Violations result in CI build failure and code review blocks.
</enforcement>
43 changes: 43 additions & 0 deletions .actual/rules/cross-cutting-activities-use-androidx-c392.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
# Adopt Android Activity and AndroidX ComponentActivity as Application Entry Points: Activities Use Androidx

These rules are ALWAYS ACTIVE for all Activity and ViewModel implementations serving as application entry points, including credential provider flows, OAuth callbacks, autofill callbacks, and main application UI.

### Rules

- **R-ACT-001** MAY: Activities MAY use androidx.activity.result.contract.ActivityResultContracts for type-safe activity result handling when coordinating with other activities or system pickers.
- **R-ACT-002** MUST: All Activity subclasses serving as application entry points MUST extend either androidx.activity.ComponentActivity or androidx.appcompat.app.AppCompatActivity.
- **R-ACT-003** MUST: All Activity classes requiring dependency injection MUST be annotated with @AndroidEntryPoint.
- **R-ACT-004** MUST: All ViewModel classes paired with Activities MUST be annotated with @HiltViewModel.
- **R-ACT-005** MUST: ViewModel instances MUST be obtained through androidx.activity.viewModels() delegation in Activity implementations.
- **R-ACT-006** MUST: Intent handling MUST be implemented in onCreate and onNewIntent methods, routing Intent data to ViewModel through sealed action classes.
- **R-ACT-007** MUST: Specialized Activity implementations MUST exist for distinct system integration points (credential provider, auth callback, autofill callback, main UI).
- **R-ACT-008** SHOULD: Activity entry points SHOULD be declared in AndroidManifest.xml with appropriate intent filters for system integration.
- **R-ACT-009** SHOULD: ViewModel implementations SHOULD extend BaseViewModel as common parent class to standardize state management patterns and lifecycle handling.

### Verify

```bash
# Count Activity classes extending AndroidX base classes
grep -r "extends ComponentActivity\|extends AppCompatActivity" app/src/main/kotlin --include="*Activity.kt" | wc -l

# Count Activity classes annotated with @AndroidEntryPoint
grep -r "@AndroidEntryPoint" app/src/main/kotlin --include="*Activity.kt" | wc -l

# Count ViewModel classes annotated with @HiltViewModel
grep -r "@HiltViewModel" app/src/main/kotlin --include="*ViewModel.kt" | wc -l

# Count Activity classes using androidx.activity.viewModels delegation
grep -r "androidx.activity.viewModels" app/src/main/kotlin --include="*Activity.kt" | wc -l
```

**Accept when:**
- All Activity classes extend either androidx.activity.ComponentActivity or androidx.appcompat.app.AppCompatActivity
- All Activity classes requiring dependency injection are annotated with @AndroidEntryPoint
- All ViewModel classes are annotated with @HiltViewModel and obtained through androidx.activity.viewModels delegation
- Specialized Activity implementations exist for distinct system integration points (credential provider, auth callback, autofill callback, main UI)
- Intent handling is implemented in onCreate and onNewIntent methods with routing to ViewModel through sealed action classes
- Activity entry points are declared in AndroidManifest.xml with appropriate intent filters

<enforcement>
Claude Code MUST NOT skip or defer verification. All Activity and ViewModel implementations MUST comply with R-ACT-002 through R-ACT-007 (MUST-level rules). Violations block CI pipeline builds. Exceptions require architecture team approval and tracking issues with migration plans.
</enforcement>
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
# Adopt Android Activity and AndroidX ComponentActivity as Application Entry Points: Activity Implementations Override

These rules are ALWAYS ACTIVE for all Activity and ViewModel implementations serving as application entry points, including credential provider flows, OAuth callbacks, autofill callbacks, and main application UI.

### Rules

- **R-ACTIVITY-001** MUST: Activity implementations MUST override onCreate with Bundle parameter and handle Intent routing through android.content.Intent to support system-initiated flows.
- **R-ACTIVITY-002** MUST: All Activity classes requiring dependency injection MUST be annotated with @AndroidEntryPoint to enable Hilt code generation.
- **R-ACTIVITY-003** MUST: All Activity classes MUST extend either androidx.activity.ComponentActivity or androidx.appcompat.app.AppCompatActivity as base classes.
- **R-ACTIVITY-004** MUST: All ViewModel classes paired with Activities MUST be annotated with @HiltViewModel.
- **R-ACTIVITY-005** MUST: ViewModel instances MUST be obtained through androidx.activity.viewModels() delegation in Activity onCreate to ensure proper lifecycle scoping.
- **R-ACTIVITY-006** MUST: Intent data routing MUST be implemented in onCreate and onNewIntent methods, delegating to ViewModel through sealed action classes.
- **R-ACTIVITY-007** MUST: All Activity entry points MUST be declared in AndroidManifest.xml with appropriate intent filters for system integration.
- **R-ACTIVITY-008** SHOULD: ViewModel implementations SHOULD extend BaseViewModel as common parent class to standardize state management patterns.

### Verify

```bash
# Count Activity classes extending approved AndroidX base classes
grep -r "extends ComponentActivity\|extends AppCompatActivity" app/src/main/kotlin --include="*Activity.kt" | wc -l

# Count Activity classes annotated with @AndroidEntryPoint
grep -r "@AndroidEntryPoint" app/src/main/kotlin --include="*Activity.kt" | wc -l

# Count ViewModel classes annotated with @HiltViewModel
grep -r "@HiltViewModel" app/src/main/kotlin --include="*ViewModel.kt" | wc -l

# Count Activity classes using androidx.activity.viewModels delegation
grep -r "androidx.activity.viewModels" app/src/main/kotlin --include="*Activity.kt" | wc -l
```

**Accept when:**
- All Activity classes extend either androidx.activity.ComponentActivity or androidx.appcompat.app.AppCompatActivity
- All Activity classes requiring dependency injection are annotated with @AndroidEntryPoint
- All ViewModel classes are annotated with @HiltViewModel and obtained through androidx.activity.viewModels delegation
- Specialized Activity implementations exist for distinct system integration points (credential provider, auth callback, autofill callback, main UI)
- Intent handling is implemented in onCreate and onNewIntent methods with routing to ViewModel
- All Activity entry points are declared in AndroidManifest.xml with appropriate intent filters

<enforcement>
Claude Code MUST NOT skip or defer verification. Static analysis scanning for Activity base class inheritance patterns, lint rules checking @AndroidEntryPoint annotation presence, code review verification of ViewModel instantiation, and CI pipeline checks for AndroidManifest Activity declarations are mandatory. Violations result in CI build failure and code review blocks.
</enforcement>
Loading