deer social fork for personal usage. but you might see a use idk. github mirror

android builds that are semi useable

commit a9a12884a78b578c747f2d75f4481823f412a7b3
Author: Aviva Ruben <aviva@rubenfamily.com>
Date: Mon Apr 28 22:24:35 2025 -0500

add sideload android profile

commit 53ebbc70474e9b7cdc9359ecee7f52c073fc078c
Author: Aviva Ruben <aviva@rubenfamily.com>
Date: Mon Apr 28 21:34:05 2025 -0500

idents

commit 94a6d9b0848f5631c7df98da3e594a57fea12828
Author: Aviva Ruben <aviva@rubenfamily.com>
Date: Sun Apr 27 22:58:54 2025 -0500

update identifiers

commit 676b03c66d142565730b4600b0f927afbdd05071
Author: Aviva Ruben <aviva@rubenfamily.com>
Date: Sun Apr 27 22:43:29 2025 -0500

fix dialog popups n such!

commit 5870d3dbff131338fd932cc8f51439ba41325b87
Author: Aviva Ruben <aviva@rubenfamily.com>
Date: Sun Apr 27 18:34:19 2025 -0500

betterer

commit 5a05aead824c64fcc099c91be203c3d73770cdf5
Author: Aviva Ruben <aviva@rubenfamily.com>
Date: Sun Apr 27 16:33:05 2025 -0500

more image work

commit b45c3d72527389e8c10e90a687897fc7bb669352
Author: Aviva Ruben <aviva@rubenfamily.com>
Date: Sun Apr 27 12:00:50 2025 -0500

icons pt1

commit 637aadb3b08221399eca1467e14dc46ceb56691c
Author: Aviva Ruben <aviva@rubenfamily.com>
Date: Fri Apr 25 21:59:40 2025 -0500

avoid unavail api

commit 33188fd6f876caa8ca8dde3e8fc1c67bb38fe44d
Author: Aviva Ruben <aviva@rubenfamily.com>
Date: Fri Apr 25 20:38:07 2025 -0500

add image to flake

+108 -111
app.config.js
··· 1 1 const pkg = require('./package.json') 2 2 3 - const DARK_SPLASH_ANDROID_BACKGROUND = '#0f141b' 3 + const DARK_SPLASH_ANDROID_BACKGROUND = '#0e1610' 4 4 5 5 module.exports = function (_config) { 6 6 /** ··· 20 20 const IS_DEV = !IS_TESTFLIGHT || !IS_PRODUCTION 21 21 22 22 const ASSOCIATED_DOMAINS = [ 23 - 'applinks:bsky.app', 24 - 'applinks:staging.bsky.app', 25 - 'appclips:bsky.app', 26 - 'appclips:go.bsky.app', // Allows App Clip to work when scanning QR codes 23 + 'applinks:deer.social', 27 24 // When testing local services, enter an ngrok (et al) domain here. It must use a standard HTTP/HTTPS port. 28 25 ...(IS_DEV || IS_TESTFLIGHT ? [] : []), 29 26 ] 30 27 31 - const UPDATES_CHANNEL = IS_TESTFLIGHT 32 - ? 'testflight' 33 - : IS_PRODUCTION 34 - ? 'production' 35 - : undefined 36 - const UPDATES_ENABLED = !!UPDATES_CHANNEL 28 + // const UPDATES_CHANNEL = IS_TESTFLIGHT 29 + // ? 'testflight' 30 + // : IS_PRODUCTION 31 + // ? 'production' 32 + // : undefined 33 + // const UPDATES_ENABLED = !!UPDATES_CHANNEL 37 34 38 35 const USE_SENTRY = Boolean(process.env.SENTRY_AUTH_TOKEN) 39 36 ··· 44 41 slug: 'deer', 45 42 scheme: ['bluesky', 'deer'], 46 43 // owner: 'blueskysocial', 47 - owner: 'neema.brown', 44 + // owner: 'neema.brown', 48 45 runtimeVersion: { 49 46 policy: 'appVersion', 50 47 }, 51 48 icon: './assets/app-icons/ios_icon_default_light.png', 52 49 userInterfaceStyle: 'automatic', 53 - primaryColor: '#1083fe', 50 + primaryColor: '#4b9b6c', 54 51 ios: { 55 52 supportsTablet: false, 56 - bundleIdentifier: 'com.deersocial', 53 + bundleIdentifier: 'social.deer', 57 54 config: { 58 55 usesNonExemptEncryption: false, 59 56 }, ··· 67 64 'Used to save images to your library.', 68 65 NSPhotoLibraryUsageDescription: 69 66 'Used for profile pictures, posts, and other kinds of content', 70 - CFBundleSpokenName: 'Deer Social', 67 + CFBundleSpokenName: 'deer.social', 71 68 CFBundleLocalizations: [ 72 69 'en', 73 70 'an', ··· 113 110 entitlements: { 114 111 'com.apple.developer.kernel.increased-memory-limit': true, 115 112 'com.apple.developer.kernel.extended-virtual-addressing': true, 116 - 'com.apple.security.application-groups': 'group.app.bsky', 113 + 'com.apple.security.application-groups': 'group.social.deer', 117 114 }, 118 115 privacyManifests: { 119 116 NSPrivacyAccessedAPITypes: [ ··· 154 151 foregroundImage: './assets/icon-android-foreground.png', 155 152 monochromeImage: './assets/icon-android-foreground.png', 156 153 backgroundImage: './assets/icon-android-background.png', 157 - backgroundColor: '#1185FE', 154 + backgroundColor: '#4b9b6c', 158 155 }, 159 156 googleServicesFile: './google-services.json', 160 - package: 'com.deersocial', 157 + package: 'social.deer', 161 158 intentFilters: [ 162 159 { 163 160 action: 'VIEW', ··· 165 162 data: [ 166 163 { 167 164 scheme: 'https', 168 - host: 'bsky.app', 165 + host: 'deer.social', 169 166 }, 170 167 IS_DEV && { 171 168 scheme: 'http', ··· 179 176 web: { 180 177 favicon: './assets/favicon.png', 181 178 }, 182 - updates: { 183 - url: 'https://updates.bsky.app/manifest', 184 - enabled: UPDATES_ENABLED, 185 - fallbackToCacheTimeout: 30000, 186 - codeSigningCertificate: UPDATES_ENABLED 187 - ? './code-signing/certificate.pem' 188 - : undefined, 189 - codeSigningMetadata: UPDATES_ENABLED 190 - ? { 191 - keyid: 'main', 192 - alg: 'rsa-v1_5-sha256', 193 - } 194 - : undefined, 195 - checkAutomatically: 'NEVER', 196 - channel: UPDATES_CHANNEL, 197 - }, 179 + // updates: { 180 + // url: 'https://updates.bsky.app/manifest', 181 + // enabled: UPDATES_ENABLED, 182 + // fallbackToCacheTimeout: 30000, 183 + // codeSigningCertificate: UPDATES_ENABLED 184 + // ? './code-signing/certificate.pem' 185 + // : undefined, 186 + // codeSigningMetadata: UPDATES_ENABLED 187 + // ? { 188 + // keyid: 'main', 189 + // alg: 'rsa-v1_5-sha256', 190 + // } 191 + // : undefined, 192 + // checkAutomatically: 'NEVER', 193 + // channel: UPDATES_CHANNEL, 194 + // }, 198 195 plugins: [ 199 196 'expo-video', 200 197 'expo-localization', ··· 225 222 'expo-notifications', 226 223 { 227 224 icon: './assets/icon-android-notification.png', 228 - color: '#1185fe', 225 + color: '#4b9b6c', 229 226 sounds: PLATFORM === 'ios' ? ['assets/dm.aiff'] : ['assets/dm.mp3'], 230 227 }, 231 228 ], ··· 273 270 resizeMode: 'cover', 274 271 dark: { 275 272 enableFullScreenImage_legacy: true, 276 - backgroundColor: '#001429', 273 + backgroundColor: '#03180c', 277 274 image: './assets/splash-dark.png', 278 275 resizeMode: 'cover', 279 276 }, 280 277 }, 281 278 android: { 282 - backgroundColor: '#0c7cff', 279 + backgroundColor: '#4b9b6c', 283 280 image: './assets/splash-android-icon.png', 284 281 imageWidth: 150, 285 282 dark: { 286 - backgroundColor: '#0c2a49', 283 + backgroundColor: '#01331a', 287 284 image: './assets/splash-android-icon-dark.png', 288 285 imageWidth: 150, 289 286 }, ··· 310 307 /** 311 308 * Bluesky+ core set 312 309 */ 313 - core_aurora: { 314 - ios: './assets/app-icons/ios_icon_core_aurora.png', 315 - android: './assets/app-icons/android_icon_core_aurora.png', 316 - prerendered: true, 317 - }, 318 - core_bonfire: { 319 - ios: './assets/app-icons/ios_icon_core_bonfire.png', 320 - android: './assets/app-icons/android_icon_core_bonfire.png', 321 - prerendered: true, 322 - }, 323 - core_sunrise: { 324 - ios: './assets/app-icons/ios_icon_core_sunrise.png', 325 - android: './assets/app-icons/android_icon_core_sunrise.png', 326 - prerendered: true, 327 - }, 328 - core_sunset: { 329 - ios: './assets/app-icons/ios_icon_core_sunset.png', 330 - android: './assets/app-icons/android_icon_core_sunset.png', 331 - prerendered: true, 332 - }, 333 - core_midnight: { 334 - ios: './assets/app-icons/ios_icon_core_midnight.png', 335 - android: './assets/app-icons/android_icon_core_midnight.png', 336 - prerendered: true, 337 - }, 338 - core_flat_blue: { 339 - ios: './assets/app-icons/ios_icon_core_flat_blue.png', 340 - android: './assets/app-icons/android_icon_core_flat_blue.png', 341 - prerendered: true, 342 - }, 343 - core_flat_white: { 344 - ios: './assets/app-icons/ios_icon_core_flat_white.png', 345 - android: './assets/app-icons/android_icon_core_flat_white.png', 346 - prerendered: true, 347 - }, 348 - core_flat_black: { 349 - ios: './assets/app-icons/ios_icon_core_flat_black.png', 350 - android: './assets/app-icons/android_icon_core_flat_black.png', 351 - prerendered: true, 352 - }, 353 - core_classic: { 354 - ios: './assets/app-icons/ios_icon_core_classic.png', 355 - android: './assets/app-icons/android_icon_core_classic.png', 356 - prerendered: true, 357 - }, 310 + // core_aurora: { 311 + // ios: './assets/app-icons/ios_icon_core_aurora.png', 312 + // android: './assets/app-icons/android_icon_core_aurora.png', 313 + // prerendered: true, 314 + // }, 315 + // core_bonfire: { 316 + // ios: './assets/app-icons/ios_icon_core_bonfire.png', 317 + // android: './assets/app-icons/android_icon_core_bonfire.png', 318 + // prerendered: true, 319 + // }, 320 + // core_sunrise: { 321 + // ios: './assets/app-icons/ios_icon_core_sunrise.png', 322 + // android: './assets/app-icons/android_icon_core_sunrise.png', 323 + // prerendered: true, 324 + // }, 325 + // core_sunset: { 326 + // ios: './assets/app-icons/ios_icon_core_sunset.png', 327 + // android: './assets/app-icons/android_icon_core_sunset.png', 328 + // prerendered: true, 329 + // }, 330 + // core_midnight: { 331 + // ios: './assets/app-icons/ios_icon_core_midnight.png', 332 + // android: './assets/app-icons/android_icon_core_midnight.png', 333 + // prerendered: true, 334 + // }, 335 + // core_flat_blue: { 336 + // ios: './assets/app-icons/ios_icon_core_flat_blue.png', 337 + // android: './assets/app-icons/android_icon_core_flat_blue.png', 338 + // prerendered: true, 339 + // }, 340 + // core_flat_white: { 341 + // ios: './assets/app-icons/ios_icon_core_flat_white.png', 342 + // android: './assets/app-icons/android_icon_core_flat_white.png', 343 + // prerendered: true, 344 + // }, 345 + // core_flat_black: { 346 + // ios: './assets/app-icons/ios_icon_core_flat_black.png', 347 + // android: './assets/app-icons/android_icon_core_flat_black.png', 348 + // prerendered: true, 349 + // }, 350 + // core_classic: { 351 + // ios: './assets/app-icons/ios_icon_core_classic.png', 352 + // android: './assets/app-icons/android_icon_core_classic.png', 353 + // prerendered: true, 354 + // }, 358 355 }, 359 356 ], 360 357 ['expo-screen-orientation', {initialOrientation: 'PORTRAIT_UP'}], ··· 362 359 'react-native-vision-camera', 363 360 { 364 361 enableLocation: false, 365 - cameraPermissionText: 'Bluesky needs access to your camera.', 362 + cameraPermissionText: 'deer.social needs access to your camera.', 366 363 enableMicrophonePermission: true, 367 364 microphonePermissionText: 368 - 'Bluesky needs access to your microphone.', 365 + 'deer.social needs access to your microphone.', 369 366 }, 370 367 ], 371 368 ].filter(Boolean), ··· 374 371 build: { 375 372 experimental: { 376 373 ios: { 377 - appExtensions: [ 378 - { 379 - targetName: 'Share-with-Bluesky', 380 - bundleIdentifier: 'xyz.blueskyweb.app.Share-with-Bluesky', 381 - entitlements: { 382 - 'com.apple.security.application-groups': [ 383 - 'group.app.bsky', 384 - ], 385 - }, 386 - }, 387 - { 388 - targetName: 'BlueskyNSE', 389 - bundleIdentifier: 'xyz.blueskyweb.app.BlueskyNSE', 390 - entitlements: { 391 - 'com.apple.security.application-groups': [ 392 - 'group.app.bsky', 393 - ], 394 - }, 395 - }, 396 - { 397 - targetName: 'BlueskyClip', 398 - bundleIdentifier: 'xyz.blueskyweb.app.AppClip', 399 - }, 400 - ], 374 + // appExtensions: [ 375 + // { 376 + // targetName: 'Share-with-Bluesky', 377 + // bundleIdentifier: 'xyz.blueskyweb.app.Share-with-Bluesky', 378 + // entitlements: { 379 + // 'com.apple.security.application-groups': [ 380 + // 'group.app.bsky', 381 + // ], 382 + // }, 383 + // }, 384 + // { 385 + // targetName: 'BlueskyNSE', 386 + // bundleIdentifier: 'xyz.blueskyweb.app.BlueskyNSE', 387 + // entitlements: { 388 + // 'com.apple.security.application-groups': [ 389 + // 'group.app.bsky', 390 + // ], 391 + // }, 392 + // }, 393 + // { 394 + // targetName: 'BlueskyClip', 395 + // bundleIdentifier: 'xyz.blueskyweb.app.AppClip', 396 + // }, 397 + // ], 401 398 }, 402 399 }, 403 400 }, 404 401 //projectId: '55bd077a-d905-4184-9c7f-94789ba0f302', 405 - projectId: '7fdb5d99-3996-4a6c-bdf5-b4c1698aa7e6', 402 + projectId: '86ff94e3-dce0-4f7c-99f4-1651a2f1bc2a', 406 403 }, 407 404 }, 408 405 },
+284
assets/app-icons/android_base.svg
··· 1 + <?xml version="1.0" encoding="UTF-8" standalone="no"?> 2 + <!-- Created with Inkscape (http://www.inkscape.org/) --> 3 + 4 + <svg 5 + width="512" 6 + height="512" 7 + viewBox="0 0 512 512" 8 + version="1.1" 9 + id="svg1" 10 + sodipodi:docname="android_base.svg" 11 + inkscape:version="1.4 (e7c3feb100, 2024-10-09)" 12 + inkscape:export-filename="android_icon_default_dark.png" 13 + inkscape:export-xdpi="192" 14 + inkscape:export-ydpi="192" 15 + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" 16 + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" 17 + xmlns:xlink="http://www.w3.org/1999/xlink" 18 + xmlns="http://www.w3.org/2000/svg" 19 + xmlns:svg="http://www.w3.org/2000/svg"> 20 + <sodipodi:namedview 21 + id="namedview1" 22 + pagecolor="#ffffff" 23 + bordercolor="#000000" 24 + borderopacity="0.25" 25 + inkscape:showpageshadow="2" 26 + inkscape:pageopacity="0.0" 27 + inkscape:pagecheckerboard="0" 28 + inkscape:deskcolor="#d1d1d1" 29 + inkscape:document-units="px" 30 + showgrid="false" 31 + showguides="false" 32 + inkscape:zoom="0.85483824" 33 + inkscape:cx="289.52846" 34 + inkscape:cy="208.81144" 35 + inkscape:window-width="1706" 36 + inkscape:window-height="905" 37 + inkscape:window-x="20" 38 + inkscape:window-y="20" 39 + inkscape:window-maximized="0" 40 + inkscape:current-layer="svg1"> 41 + <inkscape:grid 42 + id="grid1" 43 + units="px" 44 + originx="0" 45 + originy="0" 46 + spacingx="1" 47 + spacingy="1" 48 + empcolor="#0099e5" 49 + empopacity="0.30196078" 50 + color="#0099e5" 51 + opacity="0.14901961" 52 + empspacing="5" 53 + enabled="true" 54 + visible="false" /> 55 + <sodipodi:guide 56 + position="7.2092363,499.98461" 57 + orientation="0.73456475,0.6785386" 58 + id="guide15" 59 + inkscape:locked="false" /> 60 + <sodipodi:guide 61 + position="250,12" 62 + orientation="0,-1" 63 + id="guide16" 64 + inkscape:locked="false" /> 65 + <sodipodi:guide 66 + position="7.2114897,499.98617" 67 + orientation="0.90391787,0.42770606" 68 + id="guide17" 69 + inkscape:locked="false" /> 70 + <sodipodi:guide 71 + position="114.38555,198.20474" 72 + orientation="0.90391787,0.42770608" 73 + id="guide18" 74 + inkscape:label="" 75 + inkscape:locked="false" 76 + inkscape:color="rgb(0,134,229)" /> 77 + <sodipodi:guide 78 + position="372.00185,356.22842" 79 + orientation="0.73454936,-0.67855525" 80 + id="guide19" 81 + inkscape:locked="false" /> 82 + </sodipodi:namedview> 83 + <defs 84 + id="defs1"> 85 + <linearGradient 86 + id="linearGradient27" 87 + inkscape:collect="always"> 88 + <stop 89 + style="stop-color:#1a251e;stop-opacity:1;" 90 + offset="0" 91 + id="stop26" /> 92 + <stop 93 + style="stop-color:#3c452c;stop-opacity:1;" 94 + offset="1" 95 + id="stop27" /> 96 + </linearGradient> 97 + <linearGradient 98 + id="linearGradient23" 99 + inkscape:collect="always"> 100 + <stop 101 + style="stop-color:#344e41;stop-opacity:1;" 102 + offset="0" 103 + id="stop23" /> 104 + <stop 105 + style="stop-color:#a3b18a;stop-opacity:1;" 106 + offset="1" 107 + id="stop24" /> 108 + </linearGradient> 109 + <filter 110 + id="selectable_hidder_filter" 111 + width="1" 112 + height="1" 113 + x="0" 114 + y="0" 115 + style="color-interpolation-filters:sRGB;" 116 + inkscape:label="LPE boolean visibility"> 117 + <feComposite 118 + id="boolops_hidder_primitive" 119 + result="composite1" 120 + operator="arithmetic" 121 + in2="SourceGraphic" 122 + in="BackgroundImage" /> 123 + </filter> 124 + <inkscape:path-effect 125 + effect="bool_op" 126 + operand-path="" 127 + id="path-effect16" 128 + is_visible="true" 129 + lpeversion="1" 130 + operation="cut" 131 + swap-operands="false" 132 + filltype-this="from-curve" 133 + filter="" 134 + filltype-operand="from-curve" /> 135 + <inkscape:path-effect 136 + effect="mirror_symmetry" 137 + start_point="153.53846,-190.49753" 138 + end_point="529.50144,157.05943" 139 + center_point="341.51995,-16.71905" 140 + id="path-effect15" 141 + is_visible="true" 142 + lpeversion="1.2" 143 + lpesatellites="" 144 + mode="vertical" 145 + discard_orig_path="false" 146 + fuse_paths="false" 147 + oposite_fuse="false" 148 + split_items="false" 149 + split_open="false" 150 + link_styles="false" /> 151 + <inkscape:path-effect 152 + effect="mirror_symmetry" 153 + start_point="242.40625,64.77241" 154 + end_point="242.40625,593.03423" 155 + center_point="242.40625,328.90332" 156 + id="path-effect14" 157 + is_visible="true" 158 + lpeversion="1.2" 159 + lpesatellites="" 160 + mode="vertical" 161 + discard_orig_path="false" 162 + fuse_paths="true" 163 + oposite_fuse="false" 164 + split_items="false" 165 + split_open="false" 166 + link_styles="false" /> 167 + <inkscape:path-effect 168 + effect="mirror_symmetry" 169 + start_point="238.18975,-35.620493" 170 + end_point="238.18975,476.37951" 171 + center_point="238.18975,220.37951" 172 + id="path-effect13" 173 + is_visible="true" 174 + lpeversion="1.2" 175 + lpesatellites="" 176 + mode="vertical" 177 + discard_orig_path="false" 178 + fuse_paths="false" 179 + oposite_fuse="false" 180 + split_items="false" 181 + split_open="false" 182 + link_styles="false" /> 183 + <inkscape:path-effect 184 + effect="mirror_symmetry" 185 + start_point="259.66682,-1.5714927" 186 + end_point="259.66682,510.42851" 187 + center_point="259.66682,254.42851" 188 + id="path-effect12" 189 + is_visible="true" 190 + lpeversion="1.2" 191 + lpesatellites="" 192 + mode="vertical" 193 + discard_orig_path="false" 194 + fuse_paths="true" 195 + oposite_fuse="false" 196 + split_items="false" 197 + split_open="false" 198 + link_styles="false" /> 199 + <inkscape:path-effect 200 + effect="clone_original" 201 + css_properties="" 202 + attributes="style,clip-path,mask" 203 + linkeditem="" 204 + is_visible="true" 205 + method="d" 206 + allow_transforms="true" 207 + id="path-effect11" 208 + lpeversion="1" /> 209 + <inkscape:path-effect 210 + effect="mirror_symmetry" 211 + start_point="274.33408,-38.239647" 212 + end_point="274.33408,473.76035" 213 + center_point="274.33408,217.76035" 214 + id="path-effect10" 215 + is_visible="true" 216 + lpeversion="1.2" 217 + lpesatellites="" 218 + mode="vertical" 219 + discard_orig_path="false" 220 + fuse_paths="false" 221 + oposite_fuse="false" 222 + split_items="false" 223 + split_open="false" 224 + link_styles="false" /> 225 + <inkscape:path-effect 226 + effect="mirror_symmetry" 227 + start_point="241.42806,-153.19556" 228 + end_point="241.42806,358.80444" 229 + center_point="241.42806,102.80444" 230 + id="path-effect9" 231 + is_visible="true" 232 + lpeversion="1.2" 233 + lpesatellites="" 234 + mode="vertical" 235 + discard_orig_path="false" 236 + fuse_paths="false" 237 + oposite_fuse="false" 238 + split_items="false" 239 + split_open="false" 240 + link_styles="false" /> 241 + <linearGradient 242 + inkscape:collect="always" 243 + xlink:href="#linearGradient23" 244 + id="linearGradient24" 245 + x1="256" 246 + y1="0" 247 + x2="256" 248 + y2="512" 249 + gradientUnits="userSpaceOnUse" /> 250 + <linearGradient 251 + inkscape:collect="always" 252 + xlink:href="#linearGradient27" 253 + id="linearGradient26" 254 + gradientUnits="userSpaceOnUse" 255 + x1="256" 256 + y1="0" 257 + x2="256" 258 + y2="512" /> 259 + </defs> 260 + <rect 261 + style="display:inline;opacity:1;fill:url(#linearGradient24);fill-opacity:1;stroke:none;stroke-width:8;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:5;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:stroke fill markers" 262 + id="rect23" 263 + width="512" 264 + height="512" 265 + x="0" 266 + y="0" 267 + inkscape:label="light background" /> 268 + <rect 269 + style="display:inline;fill:url(#linearGradient26);fill-opacity:1;stroke:none;stroke-width:8;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:5;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:stroke fill markers" 270 + id="rect23-8" 271 + width="512" 272 + height="512" 273 + x="0" 274 + y="0" 275 + inkscape:label="dark background" /> 276 + <path 277 + style="fill:#ffffff" 278 + d="m 149.96484,186.56641 46.09766,152.95898 c 0,0 -6.30222,-9.61174 -15.60547,-17.47656 -8.87322,-7.50128 -28.4082,-4.04492 -28.4082,-4.04492 0,0 6.14721,39.88867 15.53125,44.39843 10.71251,5.1482 22.19726,0.16993 22.19726,0.16993 0,0 11.76131,-4.87282 22.82032,31.82421 5.26535,17.47195 15.33258,50.877 20.9707,69.58594 2.16611,7.18779 8.83139,7.25775 8.83789,7.25781 0.006,-6e-5 6.67178,-0.07 8.83789,-7.25781 5.63812,-18.70894 15.70535,-52.11399 20.9707,-69.58594 11.05901,-36.69703 22.82032,-31.82421 22.82032,-31.82421 0,0 11.48475,4.97827 22.19726,-0.16993 9.38404,-4.50976 15.53125,-44.39843 15.53125,-44.39843 0,0 -19.53498,-3.45636 -28.4082,4.04492 -9.30325,7.86482 -15.60547,17.47656 -15.60547,17.47656 l 46.09766,-152.95898 -49.32618,83.84179 -20.34375,-31.1914 6.35547,54.96875 -23.1582,39.36132 c 0,0 -2.97595,5.06226 -5.94336,4.68946 -0.009,-0.001 -0.017,0.003 -0.0254,0.01 -0.008,-0.007 -0.0168,-0.0108 -0.0254,-0.01 -2.96741,0.3728 -5.94336,-4.68946 -5.94336,-4.68946 l -23.1582,-39.36132 6.35547,-54.96875 -20.34375,31.1914 z" 279 + id="path13" 280 + transform="matrix(1.5217795,0,0,0.96921636,-112.88886,-62.778479)" 281 + sodipodi:nodetypes="scsccccccscscss" 282 + inkscape:original-d="m 233.56872,463.9817 c 2.16717,7.1913 8.83768,7.25821 8.83768,7.25821 0,0 1.53461,-133.19881 -0.0257,-133.00279 -2.96741,0.3728 -5.94331,-4.69028 -5.94331,-4.69028 l -23.15733,-39.3618 6.35509,-54.96755 -20.34345,31.19075 -49.32605,-83.84223 46.09711,152.95859 c 0,0 -6.30275,-9.61063 -15.606,-17.47545 -8.87322,-7.50128 -28.40888,-4.04487 -28.40888,-4.04487 0,0 6.14833,39.88845 15.53237,44.39821 10.71251,5.1482 22.19654,0.17066 22.19654,0.17066 0,0 11.76274,-4.87365 22.82175,31.82338 5.26535,17.47195 15.33206,50.87623 20.97018,69.58517 z" 283 + inkscape:path-effect="#path-effect14" /> 284 + </svg>
assets/app-icons/android_icon_core_aurora.png

This is a binary file and will not be displayed.

assets/app-icons/android_icon_core_bonfire.png

This is a binary file and will not be displayed.

assets/app-icons/android_icon_core_classic.png

This is a binary file and will not be displayed.

assets/app-icons/android_icon_core_flat_black.png

This is a binary file and will not be displayed.

assets/app-icons/android_icon_core_flat_blue.png

This is a binary file and will not be displayed.

assets/app-icons/android_icon_core_flat_white.png

This is a binary file and will not be displayed.

assets/app-icons/android_icon_core_midnight.png

This is a binary file and will not be displayed.

assets/app-icons/android_icon_core_sunrise.png

This is a binary file and will not be displayed.

assets/app-icons/android_icon_core_sunset.png

This is a binary file and will not be displayed.

assets/app-icons/android_icon_default_dark.png

This is a binary file and will not be displayed.

assets/app-icons/android_icon_default_light.png

This is a binary file and will not be displayed.

+284
assets/app-icons/ios_base.svg
··· 1 + <?xml version="1.0" encoding="UTF-8" standalone="no"?> 2 + <!-- Created with Inkscape (http://www.inkscape.org/) --> 3 + 4 + <svg 5 + width="512" 6 + height="512" 7 + viewBox="0 0 512 512" 8 + version="1.1" 9 + id="svg1" 10 + sodipodi:docname="ios_base.svg" 11 + inkscape:version="1.4 (e7c3feb100, 2024-10-09)" 12 + inkscape:export-filename="ios_icon_default_dark.png" 13 + inkscape:export-xdpi="192" 14 + inkscape:export-ydpi="192" 15 + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" 16 + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" 17 + xmlns:xlink="http://www.w3.org/1999/xlink" 18 + xmlns="http://www.w3.org/2000/svg" 19 + xmlns:svg="http://www.w3.org/2000/svg"> 20 + <sodipodi:namedview 21 + id="namedview1" 22 + pagecolor="#ffffff" 23 + bordercolor="#000000" 24 + borderopacity="0.25" 25 + inkscape:showpageshadow="2" 26 + inkscape:pageopacity="0.0" 27 + inkscape:pagecheckerboard="0" 28 + inkscape:deskcolor="#d1d1d1" 29 + inkscape:document-units="px" 30 + showgrid="false" 31 + showguides="false" 32 + inkscape:zoom="0.85483824" 33 + inkscape:cx="288.35865" 34 + inkscape:cy="208.81144" 35 + inkscape:window-width="1706" 36 + inkscape:window-height="905" 37 + inkscape:window-x="20" 38 + inkscape:window-y="20" 39 + inkscape:window-maximized="0" 40 + inkscape:current-layer="svg1"> 41 + <inkscape:grid 42 + id="grid1" 43 + units="px" 44 + originx="0" 45 + originy="0" 46 + spacingx="1" 47 + spacingy="1" 48 + empcolor="#0099e5" 49 + empopacity="0.30196078" 50 + color="#0099e5" 51 + opacity="0.14901961" 52 + empspacing="5" 53 + enabled="true" 54 + visible="false" /> 55 + <sodipodi:guide 56 + position="7.2092363,499.98461" 57 + orientation="0.73456475,0.6785386" 58 + id="guide15" 59 + inkscape:locked="false" /> 60 + <sodipodi:guide 61 + position="250,12" 62 + orientation="0,-1" 63 + id="guide16" 64 + inkscape:locked="false" /> 65 + <sodipodi:guide 66 + position="7.2114897,499.98617" 67 + orientation="0.90391787,0.42770606" 68 + id="guide17" 69 + inkscape:locked="false" /> 70 + <sodipodi:guide 71 + position="114.38555,198.20474" 72 + orientation="0.90391787,0.42770608" 73 + id="guide18" 74 + inkscape:label="" 75 + inkscape:locked="false" 76 + inkscape:color="rgb(0,134,229)" /> 77 + <sodipodi:guide 78 + position="372.00185,356.22842" 79 + orientation="0.73454936,-0.67855525" 80 + id="guide19" 81 + inkscape:locked="false" /> 82 + </sodipodi:namedview> 83 + <defs 84 + id="defs1"> 85 + <linearGradient 86 + id="linearGradient27" 87 + inkscape:collect="always"> 88 + <stop 89 + style="stop-color:#1a251e;stop-opacity:1;" 90 + offset="0" 91 + id="stop26" /> 92 + <stop 93 + style="stop-color:#3c452c;stop-opacity:1;" 94 + offset="1" 95 + id="stop27" /> 96 + </linearGradient> 97 + <linearGradient 98 + id="linearGradient23" 99 + inkscape:collect="always"> 100 + <stop 101 + style="stop-color:#344e41;stop-opacity:1;" 102 + offset="0" 103 + id="stop23" /> 104 + <stop 105 + style="stop-color:#a3b18a;stop-opacity:1;" 106 + offset="1" 107 + id="stop24" /> 108 + </linearGradient> 109 + <filter 110 + id="selectable_hidder_filter" 111 + width="1" 112 + height="1" 113 + x="0" 114 + y="0" 115 + style="color-interpolation-filters:sRGB;" 116 + inkscape:label="LPE boolean visibility"> 117 + <feComposite 118 + id="boolops_hidder_primitive" 119 + result="composite1" 120 + operator="arithmetic" 121 + in2="SourceGraphic" 122 + in="BackgroundImage" /> 123 + </filter> 124 + <inkscape:path-effect 125 + effect="bool_op" 126 + operand-path="" 127 + id="path-effect16" 128 + is_visible="true" 129 + lpeversion="1" 130 + operation="cut" 131 + swap-operands="false" 132 + filltype-this="from-curve" 133 + filter="" 134 + filltype-operand="from-curve" /> 135 + <inkscape:path-effect 136 + effect="mirror_symmetry" 137 + start_point="153.53846,-190.49753" 138 + end_point="529.50144,157.05943" 139 + center_point="341.51995,-16.71905" 140 + id="path-effect15" 141 + is_visible="true" 142 + lpeversion="1.2" 143 + lpesatellites="" 144 + mode="vertical" 145 + discard_orig_path="false" 146 + fuse_paths="false" 147 + oposite_fuse="false" 148 + split_items="false" 149 + split_open="false" 150 + link_styles="false" /> 151 + <inkscape:path-effect 152 + effect="mirror_symmetry" 153 + start_point="242.40624,113.23531" 154 + end_point="242.40624,544.57133" 155 + center_point="242.40624,328.90332" 156 + id="path-effect14" 157 + is_visible="true" 158 + lpeversion="1.2" 159 + lpesatellites="" 160 + mode="vertical" 161 + discard_orig_path="false" 162 + fuse_paths="true" 163 + oposite_fuse="false" 164 + split_items="false" 165 + split_open="false" 166 + link_styles="false" /> 167 + <inkscape:path-effect 168 + effect="mirror_symmetry" 169 + start_point="238.18975,-35.620493" 170 + end_point="238.18975,476.37951" 171 + center_point="238.18975,220.37951" 172 + id="path-effect13" 173 + is_visible="true" 174 + lpeversion="1.2" 175 + lpesatellites="" 176 + mode="vertical" 177 + discard_orig_path="false" 178 + fuse_paths="false" 179 + oposite_fuse="false" 180 + split_items="false" 181 + split_open="false" 182 + link_styles="false" /> 183 + <inkscape:path-effect 184 + effect="mirror_symmetry" 185 + start_point="259.66682,-1.5714927" 186 + end_point="259.66682,510.42851" 187 + center_point="259.66682,254.42851" 188 + id="path-effect12" 189 + is_visible="true" 190 + lpeversion="1.2" 191 + lpesatellites="" 192 + mode="vertical" 193 + discard_orig_path="false" 194 + fuse_paths="true" 195 + oposite_fuse="false" 196 + split_items="false" 197 + split_open="false" 198 + link_styles="false" /> 199 + <inkscape:path-effect 200 + effect="clone_original" 201 + css_properties="" 202 + attributes="style,clip-path,mask" 203 + linkeditem="" 204 + is_visible="true" 205 + method="d" 206 + allow_transforms="true" 207 + id="path-effect11" 208 + lpeversion="1" /> 209 + <inkscape:path-effect 210 + effect="mirror_symmetry" 211 + start_point="274.33408,-38.239647" 212 + end_point="274.33408,473.76035" 213 + center_point="274.33408,217.76035" 214 + id="path-effect10" 215 + is_visible="true" 216 + lpeversion="1.2" 217 + lpesatellites="" 218 + mode="vertical" 219 + discard_orig_path="false" 220 + fuse_paths="false" 221 + oposite_fuse="false" 222 + split_items="false" 223 + split_open="false" 224 + link_styles="false" /> 225 + <inkscape:path-effect 226 + effect="mirror_symmetry" 227 + start_point="241.42806,-153.19556" 228 + end_point="241.42806,358.80444" 229 + center_point="241.42806,102.80444" 230 + id="path-effect9" 231 + is_visible="true" 232 + lpeversion="1.2" 233 + lpesatellites="" 234 + mode="vertical" 235 + discard_orig_path="false" 236 + fuse_paths="false" 237 + oposite_fuse="false" 238 + split_items="false" 239 + split_open="false" 240 + link_styles="false" /> 241 + <linearGradient 242 + inkscape:collect="always" 243 + xlink:href="#linearGradient23" 244 + id="linearGradient24" 245 + x1="256" 246 + y1="0" 247 + x2="256" 248 + y2="512" 249 + gradientUnits="userSpaceOnUse" /> 250 + <linearGradient 251 + inkscape:collect="always" 252 + xlink:href="#linearGradient27" 253 + id="linearGradient26" 254 + gradientUnits="userSpaceOnUse" 255 + x1="256" 256 + y1="0" 257 + x2="256" 258 + y2="512" /> 259 + </defs> 260 + <rect 261 + style="display:inline;opacity:1;fill:url(#linearGradient24);fill-opacity:1;stroke:none;stroke-width:8;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:5;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:stroke fill markers" 262 + id="rect23" 263 + width="512" 264 + height="512" 265 + x="0" 266 + y="0" 267 + inkscape:label="light background" /> 268 + <rect 269 + style="display:none;fill:url(#linearGradient26);fill-opacity:1;stroke:none;stroke-width:8;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:5;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:stroke fill markers" 270 + id="rect23-8" 271 + width="512" 272 + height="512" 273 + x="0" 274 + y="0" 275 + inkscape:label="dark background" /> 276 + <path 277 + style="fill:#ffffff" 278 + d="m 149.96484,186.56641 46.09766,152.95898 c 0,0 -6.30222,-9.61174 -15.60547,-17.47656 -8.87322,-7.50128 -28.4082,-4.04492 -28.4082,-4.04492 0,0 6.14721,39.88867 15.53125,44.39843 10.71251,5.1482 22.19726,0.16993 22.19726,0.16993 0,0 11.76131,-4.87282 22.82032,31.82421 5.26535,17.47195 15.33258,50.877 20.9707,69.58594 2.16607,7.18766 8.83114,7.25774 8.83789,7.25781 0.006,-7e-5 6.67182,-0.0702 8.83789,-7.25781 5.63812,-18.70894 15.70535,-52.11399 20.9707,-69.58594 11.05901,-36.69703 22.82032,-31.82421 22.82032,-31.82421 0,0 11.48475,4.97827 22.19726,-0.16993 9.38404,-4.50976 15.53125,-44.39843 15.53125,-44.39843 0,0 -19.53498,-3.45636 -28.4082,4.04492 -9.30325,7.86482 -15.60547,17.47656 -15.60547,17.47656 l 46.09766,-152.95898 -49.32618,83.84179 -20.34375,-31.1914 6.35547,54.96875 -23.1582,39.36132 c 0,0 -2.97595,5.06226 -5.94336,4.68946 -0.009,-0.001 -0.017,0.003 -0.0254,0.01 -0.008,-0.007 -0.0168,-0.0108 -0.0254,-0.01 -2.96741,0.3728 -5.94336,-4.68946 -5.94336,-4.68946 l -23.1582,-39.36132 6.35547,-54.96875 -20.34375,31.1914 z" 279 + id="path13" 280 + transform="matrix(1.8637395,0,0,1.1870096,-195.78209,-134.4114)" 281 + sodipodi:nodetypes="scsccccccscscss" 282 + inkscape:original-d="m 233.56872,463.9817 c 2.16717,7.1913 8.83768,7.25821 8.83768,7.25821 0,0 1.53461,-133.19881 -0.0257,-133.00279 -2.96741,0.3728 -5.94331,-4.69028 -5.94331,-4.69028 l -23.15733,-39.3618 6.35509,-54.96755 -20.34345,31.19075 -49.32605,-83.84223 46.09711,152.95859 c 0,0 -6.30275,-9.61063 -15.606,-17.47545 -8.87322,-7.50128 -28.40888,-4.04487 -28.40888,-4.04487 0,0 6.14833,39.88845 15.53237,44.39821 10.71251,5.1482 22.19654,0.17066 22.19654,0.17066 0,0 11.76274,-4.87365 22.82175,31.82338 5.26535,17.47195 15.33206,50.87623 20.97018,69.58517 z" 283 + inkscape:path-effect="#path-effect14" /> 284 + </svg>
assets/app-icons/ios_icon_core_aurora.png

This is a binary file and will not be displayed.

assets/app-icons/ios_icon_core_bonfire.png

This is a binary file and will not be displayed.

assets/app-icons/ios_icon_core_classic.png

This is a binary file and will not be displayed.

assets/app-icons/ios_icon_core_flat_black.png

This is a binary file and will not be displayed.

assets/app-icons/ios_icon_core_flat_blue.png

This is a binary file and will not be displayed.

assets/app-icons/ios_icon_core_flat_white.png

This is a binary file and will not be displayed.

assets/app-icons/ios_icon_core_midnight.png

This is a binary file and will not be displayed.

assets/app-icons/ios_icon_core_sunrise.png

This is a binary file and will not be displayed.

assets/app-icons/ios_icon_core_sunset.png

This is a binary file and will not be displayed.

assets/app-icons/ios_icon_default_dark.png

This is a binary file and will not be displayed.

assets/app-icons/ios_icon_default_light.png

This is a binary file and will not be displayed.

assets/default-avatar.png

This is a binary file and will not be displayed.

assets/favicon.png.bak

This is a binary file and will not be displayed.

assets/icon-android-background.png

This is a binary file and will not be displayed.

assets/icon-android-foreground.png

This is a binary file and will not be displayed.

assets/icon-android-notification.png

This is a binary file and will not be displayed.

assets/kawaii.png

This is a binary file and will not be displayed.

assets/kawaii_smol.png

This is a binary file and will not be displayed.

assets/logo.png

This is a binary file and will not be displayed.

assets/splash-android-icon-dark.png

This is a binary file and will not be displayed.

assets/splash-android-icon.png

This is a binary file and will not be displayed.

assets/splash-dark.png

This is a binary file and will not be displayed.

assets/splash.png

This is a binary file and will not be displayed.

+6
eas.json
··· 86 86 "env": { 87 87 "EXPO_PUBLIC_ENV": "testflight" 88 88 } 89 + }, 90 + "sideload-android": { 91 + "extends": "production", 92 + "android": { 93 + "buildType": "apk" 94 + } 89 95 } 90 96 }, 91 97 "submit": {
+55 -32
flake.nix
··· 6 6 }; 7 7 8 8 outputs = 9 - { nixpkgs, flake-utils, android-nixpkgs, ... }: 10 - flake-utils.lib.eachDefaultSystem (system: 11 - let 12 - pkgs = import nixpkgs { 13 - inherit system; 14 - config = { 15 - android_sdk.accept_license = true; 16 - allowUnfree = true; 9 + { 10 + nixpkgs, 11 + flake-utils, 12 + android-nixpkgs, 13 + ... 14 + }: 15 + flake-utils.lib.eachDefaultSystem ( 16 + system: 17 + let 18 + pkgs = import nixpkgs { 19 + inherit system; 20 + config = { 21 + android_sdk.accept_license = true; 22 + allowUnfree = true; 23 + }; 24 + }; 25 + pinnedJDK = pkgs.jdk17; 26 + androidSdk = android-nixpkgs.sdk.${system} ( 27 + sdkPkgs: 28 + with sdkPkgs; 29 + [ 30 + cmdline-tools-latest 31 + build-tools-35-0-0 32 + build-tools-34-0-0 33 + platform-tools 34 + platforms-android-35 35 + emulator 36 + cmake-3-22-1 37 + ndk-26-1-10909125 38 + ndk-28-0-13004108 39 + ] 40 + ++ nixpkgs.lib.optionals (system == "aarch64-darwin") [ 41 + system-images-android-35-google-apis-arm64-v8a 42 + system-images-android-35-google-apis-playstore-arm64-v8a 43 + ] 44 + ++ nixpkgs.lib.optionals (system == "x86_64-darwin" || system == "x86_64-linux") [ 45 + system-images-android-35-google-apis-x86-64 46 + system-images-android-35-google-apis-playstore-x86-64 47 + ] 48 + ); 49 + in 50 + with pkgs; 51 + { 52 + packages = { 53 + default = callPackage ./default.nix { }; 17 54 }; 18 - }; 19 - pinnedJDK = pkgs.jdk17; 20 - androidSdk = android-nixpkgs.sdk.${system} (sdkPkgs: with sdkPkgs; [ 21 - cmdline-tools-latest 22 - build-tools-35-0-0 23 - build-tools-34-0-0 24 - platform-tools 25 - platforms-android-35 26 - emulator 27 - cmake-3-22-1 28 - ndk-26-1-10909125 29 - ndk-28-0-13004108 30 - ]); 31 - in 32 - with pkgs; 33 - { 34 - packages = { 35 - default = callPackage ./default.nix { }; 36 - }; 37 - devShells = { 38 - default = 39 - mkShell rec { 55 + devShells = { 56 + default = mkShell rec { 40 57 buildInputs = [ 41 58 androidSdk 42 59 pinnedJDK ··· 56 73 crowdin-cli 57 74 eas-cli 58 75 76 + bundletool 77 + 59 78 typescript 60 79 typescript-language-server 61 80 62 81 ]; 63 82 83 + shellHook = '' 84 + export GRADLE_USER_HOME=~/.cache/gradle 85 + ''; 64 86 }; 65 - }; 66 - }); 87 + }; 88 + } 89 + ); 67 90 }
+1 -1
google-services.json.example
··· 9 9 "client_info": { 10 10 "mobilesdk_app_id": "1:123456789000:android:f1bf012572b04063", 11 11 "android_client_info": { 12 - "package_name": "xyz.blueskyweb.app" 12 + "package_name": "social.deer" 13 13 } 14 14 }, 15 15 "oauth_client": [
+1 -1
package.json
··· 1 1 { 2 - "name": "bsky.app", 2 + "name": "deer.social", 3 3 "version": "1.101.0", 4 4 "private": true, 5 5 "engines": {
+3 -3
src/lib/notifications/notifications.ts
··· 1 1 import React from 'react' 2 2 import * as Notifications from 'expo-notifications' 3 3 import {getBadgeCountAsync, setBadgeCountAsync} from 'expo-notifications' 4 - import {BskyAgent} from '@atproto/api' 4 + import {type BskyAgent} from '@atproto/api' 5 5 6 6 import {logEvent} from '#/lib/statsig/statsig' 7 7 import {Logger} from '#/logger' 8 8 import {devicePlatform, isAndroid, isNative} from '#/platform/detection' 9 - import {SessionAccount, useAgent, useSession} from '#/state/session' 9 + import {type SessionAccount, useAgent, useSession} from '#/state/session' 10 10 import BackgroundNotificationHandler from '../../../modules/expo-background-notification-handler' 11 11 12 12 const SERVICE_DID = (serviceUrl?: string) => ··· 26 26 serviceDid: SERVICE_DID(account.service), 27 27 platform: devicePlatform, 28 28 token: token.data, 29 - appId: 'xyz.blueskyweb.app', 29 + appId: 'social.deer', 30 30 }) 31 31 logger.debug('Notifications: Sent push token (init)', { 32 32 tokenType: token.type,
+107 -107
src/screens/Settings/AppIconSettings/useAppIconSets.ts
··· 2 2 import {msg} from '@lingui/macro' 3 3 import {useLingui} from '@lingui/react' 4 4 5 - import {AppIconSet} from '#/screens/Settings/AppIconSettings/types' 5 + import {type AppIconSet} from '#/screens/Settings/AppIconSettings/types' 6 6 7 7 export function useAppIconSets() { 8 8 const {_} = useLingui() ··· 34 34 /** 35 35 * Bluesky+ 36 36 */ 37 - const core = [ 38 - { 39 - id: 'core_aurora', 40 - name: _(msg({context: 'Name of app icon variant', message: 'Aurora'})), 41 - iosImage: () => { 42 - return require(`../../../../assets/app-icons/ios_icon_core_aurora.png`) 43 - }, 44 - androidImage: () => { 45 - return require(`../../../../assets/app-icons/android_icon_core_aurora.png`) 46 - }, 47 - }, 48 - // { 49 - // id: 'core_bonfire', 50 - // name: _(msg({ context: 'Name of app icon variant', message: 'Bonfire' })), 51 - // iosImage: () => { 52 - // return require(`../../../../assets/app-icons/ios_icon_core_bonfire.png`) 53 - // }, 54 - // androidImage: () => { 55 - // return require(`../../../../assets/app-icons/android_icon_core_bonfire.png`) 56 - // }, 57 - // }, 58 - { 59 - id: 'core_sunrise', 60 - name: _(msg({context: 'Name of app icon variant', message: 'Sunrise'})), 61 - iosImage: () => { 62 - return require(`../../../../assets/app-icons/ios_icon_core_sunrise.png`) 63 - }, 64 - androidImage: () => { 65 - return require(`../../../../assets/app-icons/android_icon_core_sunrise.png`) 66 - }, 67 - }, 68 - { 69 - id: 'core_sunset', 70 - name: _(msg({context: 'Name of app icon variant', message: 'Sunset'})), 71 - iosImage: () => { 72 - return require(`../../../../assets/app-icons/ios_icon_core_sunset.png`) 73 - }, 74 - androidImage: () => { 75 - return require(`../../../../assets/app-icons/android_icon_core_sunset.png`) 76 - }, 77 - }, 78 - { 79 - id: 'core_midnight', 80 - name: _( 81 - msg({context: 'Name of app icon variant', message: 'Midnight'}), 82 - ), 83 - iosImage: () => { 84 - return require(`../../../../assets/app-icons/ios_icon_core_midnight.png`) 85 - }, 86 - androidImage: () => { 87 - return require(`../../../../assets/app-icons/android_icon_core_midnight.png`) 88 - }, 89 - }, 90 - { 91 - id: 'core_flat_blue', 92 - name: _( 93 - msg({context: 'Name of app icon variant', message: 'Flat Blue'}), 94 - ), 95 - iosImage: () => { 96 - return require(`../../../../assets/app-icons/ios_icon_core_flat_blue.png`) 97 - }, 98 - androidImage: () => { 99 - return require(`../../../../assets/app-icons/android_icon_core_flat_blue.png`) 100 - }, 101 - }, 102 - { 103 - id: 'core_flat_white', 104 - name: _( 105 - msg({context: 'Name of app icon variant', message: 'Flat White'}), 106 - ), 107 - iosImage: () => { 108 - return require(`../../../../assets/app-icons/ios_icon_core_flat_white.png`) 109 - }, 110 - androidImage: () => { 111 - return require(`../../../../assets/app-icons/android_icon_core_flat_white.png`) 112 - }, 113 - }, 114 - { 115 - id: 'core_flat_black', 116 - name: _( 117 - msg({context: 'Name of app icon variant', message: 'Flat Black'}), 118 - ), 119 - iosImage: () => { 120 - return require(`../../../../assets/app-icons/ios_icon_core_flat_black.png`) 121 - }, 122 - androidImage: () => { 123 - return require(`../../../../assets/app-icons/android_icon_core_flat_black.png`) 124 - }, 125 - }, 126 - { 127 - id: 'core_classic', 128 - name: _( 129 - msg({ 130 - context: 'Name of app icon variant', 131 - message: 'Bluesky Classic™', 132 - }), 133 - ), 134 - iosImage: () => { 135 - return require(`../../../../assets/app-icons/ios_icon_core_classic.png`) 136 - }, 137 - androidImage: () => { 138 - return require(`../../../../assets/app-icons/android_icon_core_classic.png`) 139 - }, 140 - }, 141 - ] satisfies AppIconSet[] 37 + // const core = [ 38 + // { 39 + // id: 'core_aurora', 40 + // name: _(msg({context: 'Name of app icon variant', message: 'Aurora'})), 41 + // iosImage: () => { 42 + // return require(`../../../../assets/app-icons/ios_icon_core_aurora.png`) 43 + // }, 44 + // androidImage: () => { 45 + // return require(`../../../../assets/app-icons/android_icon_core_aurora.png`) 46 + // }, 47 + // }, 48 + // // { 49 + // // id: 'core_bonfire', 50 + // // name: _(msg({ context: 'Name of app icon variant', message: 'Bonfire' })), 51 + // // iosImage: () => { 52 + // // return require(`../../../../assets/app-icons/ios_icon_core_bonfire.png`) 53 + // // }, 54 + // // androidImage: () => { 55 + // // return require(`../../../../assets/app-icons/android_icon_core_bonfire.png`) 56 + // // }, 57 + // // }, 58 + // { 59 + // id: 'core_sunrise', 60 + // name: _(msg({context: 'Name of app icon variant', message: 'Sunrise'})), 61 + // iosImage: () => { 62 + // return require(`../../../../assets/app-icons/ios_icon_core_sunrise.png`) 63 + // }, 64 + // androidImage: () => { 65 + // return require(`../../../../assets/app-icons/android_icon_core_sunrise.png`) 66 + // }, 67 + // }, 68 + // { 69 + // id: 'core_sunset', 70 + // name: _(msg({context: 'Name of app icon variant', message: 'Sunset'})), 71 + // iosImage: () => { 72 + // return require(`../../../../assets/app-icons/ios_icon_core_sunset.png`) 73 + // }, 74 + // androidImage: () => { 75 + // return require(`../../../../assets/app-icons/android_icon_core_sunset.png`) 76 + // }, 77 + // }, 78 + // { 79 + // id: 'core_midnight', 80 + // name: _( 81 + // msg({context: 'Name of app icon variant', message: 'Midnight'}), 82 + // ), 83 + // iosImage: () => { 84 + // return require(`../../../../assets/app-icons/ios_icon_core_midnight.png`) 85 + // }, 86 + // androidImage: () => { 87 + // return require(`../../../../assets/app-icons/android_icon_core_midnight.png`) 88 + // }, 89 + // }, 90 + // { 91 + // id: 'core_flat_blue', 92 + // name: _( 93 + // msg({context: 'Name of app icon variant', message: 'Flat Blue'}), 94 + // ), 95 + // iosImage: () => { 96 + // return require(`../../../../assets/app-icons/ios_icon_core_flat_blue.png`) 97 + // }, 98 + // androidImage: () => { 99 + // return require(`../../../../assets/app-icons/android_icon_core_flat_blue.png`) 100 + // }, 101 + // }, 102 + // { 103 + // id: 'core_flat_white', 104 + // name: _( 105 + // msg({context: 'Name of app icon variant', message: 'Flat White'}), 106 + // ), 107 + // iosImage: () => { 108 + // return require(`../../../../assets/app-icons/ios_icon_core_flat_white.png`) 109 + // }, 110 + // androidImage: () => { 111 + // return require(`../../../../assets/app-icons/android_icon_core_flat_white.png`) 112 + // }, 113 + // }, 114 + // { 115 + // id: 'core_flat_black', 116 + // name: _( 117 + // msg({context: 'Name of app icon variant', message: 'Flat Black'}), 118 + // ), 119 + // iosImage: () => { 120 + // return require(`../../../../assets/app-icons/ios_icon_core_flat_black.png`) 121 + // }, 122 + // androidImage: () => { 123 + // return require(`../../../../assets/app-icons/android_icon_core_flat_black.png`) 124 + // }, 125 + // }, 126 + // { 127 + // id: 'core_classic', 128 + // name: _( 129 + // msg({ 130 + // context: 'Name of app icon variant', 131 + // message: 'Bluesky Classic™', 132 + // }), 133 + // ), 134 + // iosImage: () => { 135 + // return require(`../../../../assets/app-icons/ios_icon_core_classic.png`) 136 + // }, 137 + // androidImage: () => { 138 + // return require(`../../../../assets/app-icons/android_icon_core_classic.png`) 139 + // }, 140 + // }, 141 + // ] satisfies AppIconSet[] 142 142 143 143 return { 144 144 defaults, 145 - core, 145 + // core, 146 146 } 147 147 }, [_]) 148 148 }
+30 -19
src/screens/Settings/DeerSettings.tsx
··· 1 1 import {useState} from 'react' 2 2 import {View} from 'react-native' 3 + import {type ProfileViewBasic} from '@atproto/api/dist/client/types/app/bsky/actor/defs' 3 4 import {msg, Trans} from '@lingui/macro' 4 5 import {useLingui} from '@lingui/react' 5 6 import {type NativeStackScreenProps} from '@react-navigation/native-stack' ··· 51 52 useSetRepostCarouselEnabled, 52 53 } from '#/state/preferences/repost-carousel-enabled' 53 54 import {useProfilesQuery} from '#/state/queries/profile' 54 - import {TextInput} from '#/view/com/modals/util' 55 - import {List} from '#/view/com/util/List' 56 55 import * as SettingsList from '#/screens/Settings/components/SettingsList' 57 - import {atoms as a} from '#/alf' 56 + import {atoms as a, useBreakpoints} from '#/alf' 58 57 import {Admonition} from '#/components/Admonition' 59 58 import {Button, ButtonText} from '#/components/Button' 60 59 import * as Dialog from '#/components/Dialog' ··· 101 100 </View> 102 101 103 102 <View style={a.gap_lg}> 104 - <TextInput 105 - accessibilityLabel="Text input field" 103 + <Dialog.Input 104 + label="Text input field" 106 105 autoFocus 107 106 style={[styles.textInput, pal.border, pal.text]} 108 107 value={countryCode} ··· 153 152 const submit = () => { 154 153 setConstellationInstance(url) 155 154 control.close() 156 - // need to clear since we don't set value of input and component may be reused 157 - setUrl('') 155 + } 156 + 157 + const shouldDisable = () => { 158 + try { 159 + return !new URL(url).hostname.includes('.') 160 + } catch (e) { 161 + return true 162 + } 158 163 } 159 164 160 165 return ( 161 - <Dialog.Outer control={control} nativeOptions={{preventExpansion: true}}> 166 + <Dialog.Outer 167 + control={control} 168 + nativeOptions={{preventExpansion: true}} 169 + onClose={() => setUrl('')}> 162 170 <Dialog.Handle /> 163 171 <Dialog.ScrollableInner label={_(msg`Constellations instance URL`)}> 164 172 <View style={[a.gap_sm, a.pb_lg]}> ··· 168 176 </View> 169 177 170 178 <View style={a.gap_lg}> 171 - <TextInput 172 - accessibilityLabel="Text input field" 179 + <Dialog.Input 180 + label="Text input field" 173 181 autoFocus 174 182 style={[styles.textInput, pal.border, pal.text]} 175 183 onChangeText={value => { ··· 190 198 onPress={submit} 191 199 variant="solid" 192 200 color="primary" 193 - disabled={!URL.canParse(url)}> 201 + disabled={shouldDisable()}> 194 202 <ButtonText> 195 203 <Trans>Save</Trans> 196 204 </ButtonText> ··· 212 220 handles: Array.from(trusted), 213 221 }) 214 222 223 + const {gtMobile} = useBreakpoints() 224 + 215 225 return ( 216 226 results.data && 217 227 moderationOpts !== undefined && ( 218 - <List 219 - data={results.data.profiles} 220 - renderItem={({item}) => ( 221 - <SearchProfileCard profile={item} moderationOpts={moderationOpts} /> 222 - )} 223 - keyExtractor={item => item.did} 224 - contentContainerStyle={[a.pl_xl, a.pb_sm]} 225 - /> 228 + <View style={[gtMobile ? a.pl_md : a.pl_sm, a.pb_sm]}> 229 + {results.data.profiles.map(profile => ( 230 + <SearchProfileCard 231 + key={profile.did} 232 + profile={profile as ProfileViewBasic} 233 + moderationOpts={moderationOpts} 234 + /> 235 + ))} 236 + </View> 226 237 ) 227 238 ) 228 239 }
+16 -18
src/view/icons/Logo.tsx
··· 8 8 Stop, 9 9 type SvgProps, 10 10 } from 'react-native-svg' 11 - import {Image} from 'expo-image' 12 11 13 12 import {colors} from '#/lib/styles' 14 - import {useKawaiiMode} from '#/state/preferences/kawaii' 15 13 16 14 const ratio = 512 / 512 17 15 ··· 28 26 // @ts-ignore it's fiiiiine 29 27 const size = parseInt(rest.width || 32) 30 28 31 - const isKawaii = useKawaiiMode() 29 + // const isKawaii = useKawaiiMode() 32 30 33 - if (isKawaii) { 34 - return ( 35 - <Image 36 - source={ 37 - size > 100 38 - ? require('../../../assets/kawaii.png') 39 - : require('../../../assets/kawaii_smol.png') 40 - } 41 - accessibilityLabel="Bluesky" 42 - accessibilityHint="" 43 - accessibilityIgnoresInvertColors 44 - style={[{height: size, aspectRatio: 1.4}]} 45 - /> 46 - ) 47 - } 31 + // if (isKawaii) { 32 + // return ( 33 + // <Image 34 + // source={ 35 + // size > 100 36 + // ? require('../../../assets/kawaii.png') 37 + // : require('../../../assets/kawaii_smol.png') 38 + // } 39 + // accessibilityLabel="Bluesky" 40 + // accessibilityHint="" 41 + // accessibilityIgnoresInvertColors 42 + // style={[{height: size, aspectRatio: 1.4}]} 43 + // /> 44 + // ) 45 + // } 48 46 49 47 return ( 50 48 <Svg