@@ -8,8 +8,13 @@ import {
88import { colors , findStructByPath , useEqualComputed , useTask } from '@/utils' ;
99import androidVersionList from '@/utils/android.data' ;
1010import { emptyArray } from '@/utils/constants' ;
11- import { androidApiVersionList , DEFAULT_MIN_SDK , } from '@/utils/constants' ;
12- import { getVersionUrlBuilder } from '@/utils/url' ;
11+ import { androidApiVersionList , DEFAULT_MIN_SDK } from '@/utils/constants' ;
12+ import {
13+ DEFAULT_SOURCE_LINK_TARGET ,
14+ getVersionUrlBuilder ,
15+ sourceLinkTargetOptions ,
16+ type SourceLinkTarget ,
17+ } from '@/utils/url' ;
1318import {
1419 createSharedComposable ,
1520 useStorage ,
@@ -26,6 +31,7 @@ const SKIP_NEXT_AUTO_DIFF_STATE_KEY = '__androidApiDiffSkipNextAutoDiff';
2631const DIFF_CONCURRENT_COUNT_STORAGE_KEY =
2732 'android-api-diff:diff-concurrent-count:v1' ;
2833const MIN_SDK_STORAGE_KEY = 'android-api-diff:min-sdk:v1' ;
34+ const SOURCE_LINK_TARGET_STORAGE_KEY = 'android-api-diff:source-link-target:v1' ;
2935const SEARCH_HISTORY_STORAGE_KEY = 'android-api-diff:search-history:v1' ;
3036const DEFAULT_SEARCH_HISTORY = [
3137 'IActivityTaskManager.getTasks' ,
@@ -42,6 +48,8 @@ export const diffConcurrentCountOptions = Array.from(
4248
4349export const minSdkOptions = androidApiVersionList ;
4450
51+ export { sourceLinkTargetOptions } ;
52+
4553const normalizeDiffConcurrentCount = ( value : unknown ) => {
4654 const count = Number ( value ) ;
4755 if ( ! Number . isInteger ( count ) ) return DEFAULT_DIFF_CONCURRENT_COUNT ;
@@ -51,11 +59,21 @@ const normalizeDiffConcurrentCount = (value: unknown) => {
5159const normalizeMinSdk = ( value : unknown ) => {
5260 const sdk = Number ( value ) ;
5361 if ( ! Number . isInteger ( sdk ) ) return DEFAULT_MIN_SDK ;
54- const minSdk = minSdkOptions [ 0 ] ;
62+ const minSdk = minSdkOptions [ 0 ] ;
5563 const maxSdk = minSdkOptions . at ( - 1 ) ! ;
5664 return Math . min ( Math . max ( sdk , minSdk ) , maxSdk ) ;
5765} ;
5866
67+ const normalizeSourceLinkTarget = ( value : unknown ) : SourceLinkTarget => {
68+ if (
69+ typeof value === 'string' &&
70+ ( sourceLinkTargetOptions as readonly string [ ] ) . includes ( value )
71+ ) {
72+ return value as SourceLinkTarget ;
73+ }
74+ return DEFAULT_SOURCE_LINK_TARGET ;
75+ } ;
76+
5977const normalizeSearchHistory = ( value : unknown ) : string [ ] => {
6078 if ( ! Array . isArray ( value ) ) return [ ] ;
6179 const seen = new Set < string > ( ) ;
@@ -118,6 +136,18 @@ export const useSharedHomeState = createSharedComposable(() => {
118136 } ,
119137 } ,
120138 ) ;
139+ const sourceLinkTarget = useStorage < SourceLinkTarget > (
140+ SOURCE_LINK_TARGET_STORAGE_KEY ,
141+ DEFAULT_SOURCE_LINK_TARGET ,
142+ undefined ,
143+ {
144+ flush : 'sync' ,
145+ serializer : {
146+ read : ( raw ) => normalizeSourceLinkTarget ( raw ) ,
147+ write : ( value ) => normalizeSourceLinkTarget ( value ) ,
148+ } ,
149+ } ,
150+ ) ;
121151 const searchHistory = useStorage < string [ ] > (
122152 SEARCH_HISTORY_STORAGE_KEY ,
123153 ( ) => [ ...DEFAULT_SEARCH_HISTORY ] ,
@@ -413,5 +443,7 @@ export const useSharedHomeState = createSharedComposable(() => {
413443 diffConcurrentCountOptions,
414444 minSdk,
415445 minSdkOptions,
446+ sourceLinkTarget,
447+ sourceLinkTargetOptions,
416448 } ;
417449} ) ;
0 commit comments