diff --git a/CHANGELOG.md b/CHANGELOG.md index 0820d5411..67b38f9ea 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,15 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 To check the difference between the last releaes and the latest dev status, click the link above. +## [0.69.1] - 2022-11-08 + +### Fixed + +1. Reload only iframe without feature creators' section (#2290) +1. Update camera's HD icon from LOW/HD to HD with/without background (#2264) +1. Fix the wording of asset listing target from CaptureClub to Capture App (#2276) +1. Improve the wording of canNotPerformMintAndShareAction (#2277) + ## [0.69.0] - 2022-11-01 ### Changed @@ -1892,7 +1901,8 @@ This is the first release! _Capture Lite_ is a cross-platform app adapted from [ - Web - see the demo [here](https://github.com/numbersprotocol/capture-lite#demo-app) - Android - the APK file `app-debug.apk` is attached to this release -[unreleased]: https://github.com/numbersprotocol/capture-lite/compare/0.69.0...HEAD +[unreleased]: https://github.com/numbersprotocol/capture-lite/compare/0.69.1...HEAD +[0.69.1]: https://github.com/numbersprotocol/capture-lite/compare/0.69.0...0.69.1 [0.69.0]: https://github.com/numbersprotocol/capture-lite/compare/0.68.0...0.69.0 [0.68.0]: https://github.com/numbersprotocol/capture-lite/compare/0.67.1...0.68.0 [0.67.1]: https://github.com/numbersprotocol/capture-lite/compare/0.67.0...0.67.1 diff --git a/android/app/build.gradle b/android/app/build.gradle index 36cdcd5ab..3bca6fe83 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -6,8 +6,8 @@ android { applicationId "io.numbersprotocol.capturelite" minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion - versionCode 450 - versionName "0.69.0" + versionCode 451 + versionName "0.69.1" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } buildFeatures { diff --git a/ios/App/App.xcodeproj/project.pbxproj b/ios/App/App.xcodeproj/project.pbxproj index 374e60aad..8c4fec203 100644 --- a/ios/App/App.xcodeproj/project.pbxproj +++ b/ios/App/App.xcodeproj/project.pbxproj @@ -370,7 +370,7 @@ INFOPLIST_FILE = App/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 14.7; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - MARKETING_VERSION = 0.69.0; + MARKETING_VERSION = 0.69.1; OTHER_SWIFT_FLAGS = "$(inherited) \"-D\" \"COCOAPODS\" \"-DDEBUG\""; PRODUCT_BUNDLE_IDENTIFIER = io.numbersprotocol.capturelite; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -397,7 +397,7 @@ INFOPLIST_FILE = App/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 14.7; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - MARKETING_VERSION = 0.69.0; + MARKETING_VERSION = 0.69.1; PRODUCT_BUNDLE_IDENTIFIER = io.numbersprotocol.capturelite; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = NumbersAppDistributionV4; diff --git a/ios/App/ExportOptions.plist b/ios/App/ExportOptions.plist index 2c0f17f5f..0b5e14a09 100644 --- a/ios/App/ExportOptions.plist +++ b/ios/App/ExportOptions.plist @@ -9,7 +9,7 @@ provisioningProfiles io.numbersprotocol.capturelite - NumbersAppDistributionV2 + NumbersAppDistributionV4 signingCertificate Apple Distribution diff --git a/package-lock.json b/package-lock.json index b0a5faabb..7a20587e6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "capture-lite", - "version": "0.69.0", + "version": "0.69.1", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "capture-lite", - "version": "0.69.0", + "version": "0.69.1", "dependencies": { "packages": "^0.0.8", "@angular/animations": "^14.2.0", diff --git a/package.json b/package.json index f963c0de7..7ff8ce4b0 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "capture-lite", - "version": "0.69.0", + "version": "0.69.1", "author": "numbersprotocol", "homepage": "https://numbersprotocol.io/", "scripts": { diff --git a/src/app/features/home/custom-camera/custom-camera.page.scss b/src/app/features/home/custom-camera/custom-camera.page.scss index c2cffbaad..3d70a947c 100644 --- a/src/app/features/home/custom-camera/custom-camera.page.scss +++ b/src/app/features/home/custom-camera/custom-camera.page.scss @@ -32,11 +32,8 @@ mat-icon.flash-camera-button { mat-icon.camera-quality-button { position: absolute; - top: 4px; - left: 48px; - font-size: 56px; - width: 56px; - height: 56px; + top: 16px; + left: 64px; } mat-icon.close-camera-button { diff --git a/src/app/features/home/details/actions/actions.page.ts b/src/app/features/home/details/actions/actions.page.ts index 8a5b7ecaa..15b26b460 100644 --- a/src/app/features/home/details/actions/actions.page.ts +++ b/src/app/features/home/details/actions/actions.page.ts @@ -88,7 +88,7 @@ export class ActionsPage { concatMap(([response, cid]) => { if (response.count > 0) { throw new Error( - this.translocoService.translate('message.hasListedInCaptureClub') + this.translocoService.translate('message.hasListedInCaptureApp') ); } return of(cid); @@ -107,9 +107,7 @@ export class ActionsPage { ); if (listedAsSeries) { throw new Error( - this.translocoService.translate( - 'message.hasListedInCaptureClub' - ) + this.translocoService.translate('message.hasListedInCaptureApp') ); } if (response.next == null) { diff --git a/src/app/features/home/details/details.page.ts b/src/app/features/home/details/details.page.ts index 210eb2e8d..2c4293c0e 100644 --- a/src/app/features/home/details/details.page.ts +++ b/src/app/features/home/details/details.page.ts @@ -546,7 +546,7 @@ export class DetailsPage { switchMap(response => { if (response.count === 0 || !response.results[0].enabled) { throw new Error( - this.translocoService.translate('message.notListedInCaptureClub') + this.translocoService.translate('message.notListedInCaptureApp') ); } return this.diaBackendStoreService.unpublish$(response.results[0].id); diff --git a/src/app/features/home/explore-tab/explore-tab/explore-tab.component.html b/src/app/features/home/explore-tab/explore-tab/explore-tab.component.html index 73df6a4bd..9b09469c2 100644 --- a/src/app/features/home/explore-tab/explore-tab/explore-tab.component.html +++ b/src/app/features/home/explore-tab/explore-tab/explore-tab.component.html @@ -13,7 +13,7 @@ " > diff --git a/src/app/features/home/explore-tab/explore-tab/explore-tab.component.ts b/src/app/features/home/explore-tab/explore-tab/explore-tab.component.ts index e41f17ddd..24dbbc5af 100644 --- a/src/app/features/home/explore-tab/explore-tab/explore-tab.component.ts +++ b/src/app/features/home/explore-tab/explore-tab/explore-tab.component.ts @@ -1,7 +1,10 @@ import { Component } from '@angular/core'; +import { DomSanitizer } from '@angular/platform-browser'; +import { combineLatest } from 'rxjs'; import { map } from 'rxjs/operators'; import { DiaBackendAuthService } from '../../../../shared/dia-backend/auth/dia-backend-auth.service'; import { BUBBLE_IFRAME_URL } from '../../../../shared/dia-backend/secret'; +import { IframeService } from '../../../../shared/iframe/iframe.service'; import { NetworkService } from '../../../../shared/network/network.service'; @Component({ @@ -10,17 +13,22 @@ import { NetworkService } from '../../../../shared/network/network.service'; styleUrls: ['./explore-tab.component.scss'], }) export class ExploreTabComponent { - readonly bubbleIframeUrlWithCachedJWTToke$ = - this.diaBackendAuthService.cachedQueryJWTToken$.pipe( - map(token => { - return `${BUBBLE_IFRAME_URL}/?token=${token.access}&refresh_token=${token.refresh}`; - }) - ); + readonly bubbleIframeUrlWithCachedJWTToke$ = combineLatest([ + this.diaBackendAuthService.cachedQueryJWTToken$, + this.iframeService.exploreTabRefreshRequested$, + ]).pipe( + map(([token, _]) => { + const url = `${BUBBLE_IFRAME_URL}/?token=${token.access}&refresh_token=${token.refresh}`; + return this.sanitizer.bypassSecurityTrustResourceUrl(url); + }) + ); readonly networkConnected$ = this.networkService.connected$; constructor( private readonly networkService: NetworkService, - private readonly diaBackendAuthService: DiaBackendAuthService + private readonly diaBackendAuthService: DiaBackendAuthService, + private readonly iframeService: IframeService, + private readonly sanitizer: DomSanitizer ) {} } diff --git a/src/app/features/home/home.page.ts b/src/app/features/home/home.page.ts index 2b9907ca7..e8e944dbe 100644 --- a/src/app/features/home/home.page.ts +++ b/src/app/features/home/home.page.ts @@ -29,6 +29,7 @@ import { DiaBackendService } from '../../shared/dia-backend/service/dia-backend- import { DiaBackendTransactionRepository } from '../../shared/dia-backend/transaction/dia-backend-transaction-repository.service'; import { DiaBackendWalletService } from '../../shared/dia-backend/wallet/dia-backend-wallet.service'; import { ErrorService } from '../../shared/error/error.service'; +import { IframeService } from '../../shared/iframe/iframe.service'; import { MigrationService } from '../../shared/migration/service/migration.service'; import { OnboardingService } from '../../shared/onboarding/onboarding.service'; import { UserGuideService } from '../../shared/user-guide/user-guide.service'; @@ -85,7 +86,8 @@ export class HomePage { private readonly goProBluetoothService: GoProBluetoothService, private readonly diaBackendWalletService: DiaBackendWalletService, private readonly userGuideService: UserGuideService, - private readonly platform: Platform + private readonly platform: Platform, + private readonly iframeService: IframeService ) { this.downloadExpiredPostCaptures(); } @@ -344,7 +346,8 @@ export class HomePage { // eslint-disable-next-line class-methods-use-this navigateToExploreTab() { if (this.selectedTabIndex === 0) { - window.location.reload(); + // window.location.reload(); + this.iframeService.refreshExploreTabIframe(); } } diff --git a/src/app/shared/iframe/iframe.service.spec.ts b/src/app/shared/iframe/iframe.service.spec.ts new file mode 100644 index 000000000..701fbac89 --- /dev/null +++ b/src/app/shared/iframe/iframe.service.spec.ts @@ -0,0 +1,16 @@ +import { TestBed } from '@angular/core/testing'; + +import { IframeService } from './iframe.service'; + +describe('IframeService', () => { + let service: IframeService; + + beforeEach(() => { + TestBed.configureTestingModule({}); + service = TestBed.inject(IframeService); + }); + + it('should be created', () => { + expect(service).toBeTruthy(); + }); +}); diff --git a/src/app/shared/iframe/iframe.service.ts b/src/app/shared/iframe/iframe.service.ts new file mode 100644 index 000000000..818e8c52f --- /dev/null +++ b/src/app/shared/iframe/iframe.service.ts @@ -0,0 +1,13 @@ +import { Injectable } from '@angular/core'; +import { BehaviorSubject } from 'rxjs'; + +@Injectable({ + providedIn: 'root', +}) +export class IframeService { + readonly exploreTabRefreshRequested$ = new BehaviorSubject(new Date()); + + refreshExploreTabIframe() { + this.exploreTabRefreshRequested$.next(new Date()); + } +} diff --git a/src/app/shared/shared.module.ts b/src/app/shared/shared.module.ts index d8bb35162..c0f5b555f 100644 --- a/src/app/shared/shared.module.ts +++ b/src/app/shared/shared.module.ts @@ -17,6 +17,7 @@ import { CapacitorPluginsModule } from './capacitor-plugins/capacitor-plugins.mo import { ContactSelectionDialogComponent } from './contact-selection-dialog/contact-selection-dialog.component'; import { FriendInvitationDialogComponent } from './contact-selection-dialog/friend-invitation-dialog/friend-invitation-dialog.component'; import { ExportPrivateKeyModalComponent } from './export-private-key-modal/export-private-key-modal.component'; +import { IframeService } from './iframe/iframe.service'; import { MaterialModule } from './material/material.module'; import { MediaRebrandedComponent } from './media/component/media-rebranded.component'; import { MediaComponent } from './media/component/media.component'; @@ -60,6 +61,7 @@ const providers = [ GoProWifiService, GoProMediaService, UserGuideService, + IframeService, ]; @NgModule({ diff --git a/src/assets/i18n/en-us.json b/src/assets/i18n/en-us.json index 42062d591..b60250790 100644 --- a/src/assets/i18n/en-us.json +++ b/src/assets/i18n/en-us.json @@ -190,8 +190,8 @@ "mintNftAlert": "Once the NFT is minted, photo and its information can be accessed publicly. Do you still want to proceed?", "sentSuccessfully": "Sent Successfully", "confirmCopyPrivateKey": "Warning: Please do not expose your private key to anyone. Lost of private key may cause your account to be lost permanently.", - "hasListedInCaptureClub": "This asset has already been listed in CaptureClub.", - "notListedInCaptureClub": "This asset is not listed in CaptureClub" + "hasListedInCaptureApp": "This asset has already been listed in Capture App.", + "notListedInCaptureApp": "This asset is not listed in Capture App" }, "error": { "validationError": "Invalid operation. Please check your input again.", @@ -279,7 +279,7 @@ "remove": "Remove" }, "error": { - "canNotPerformMintAndShareAction": "Can not perform Mint & Share action", + "canNotPerformMintAndShareAction": "This asset is minted so that can not perform Mint & Share action", "canNotPerformOpenNetworkActions": "Can not perform open Network Actions page", "transferOwnershipActionIsUnavailable": "Transfer ownership action is unavailable. Please try again later.", "viewOnCaptureClubIsUnavailable": "View on CaptureClub action is unavailable. Please try again later.", diff --git a/src/assets/i18n/zh-tw.json b/src/assets/i18n/zh-tw.json index fd818e163..7ad5d7858 100644 --- a/src/assets/i18n/zh-tw.json +++ b/src/assets/i18n/zh-tw.json @@ -190,8 +190,8 @@ "mintNftAlert": "NFT 代幣鑄造後,影像以及所有資訊都將可被公開檢視。確定要繼續嗎?", "sentSuccessfully": "成功送出", "confirmCopyPrivateKey": "警告:請不要向任何人揭露您的金鑰,未保管好金鑰可能導致您永遠失去您的帳號。", - "hasListedInCaptureClub": "該資產已在 CaptureClub 上架。", - "notListedInCaptureClub": "該資產未上架 CaptureClub" + "hasListedInCaptureApp": "該資產已在 Capture App 上架。", + "notListedInCaptureApp": "該資產未上架 Capture App" }, "error": { "validationError": "操作或輸入有誤,請確認您的操作正確。", @@ -279,7 +279,7 @@ "remove": "移除" }, "error": { - "canNotPerformMintAndShareAction": "無法執行鑄造及分享", + "canNotPerformMintAndShareAction": "該資產已鑄造完成,無法再次鑄造與分享", "canNotPerformOpenNetworkActions": "無法打開網絡動作頁面", "transferOwnershipActionIsUnavailable": "暫時無法轉換所有權,請稍後再試。", "viewOnCaptureClubIsUnavailable": "暫時無法在 CaptureClub 觀看,請稍後再試。", diff --git a/src/assets/images/icons/capture-rebrand-camera-hq.svg b/src/assets/images/icons/capture-rebrand-camera-hq.svg index 7cf83439a..00e721d50 100644 --- a/src/assets/images/icons/capture-rebrand-camera-hq.svg +++ b/src/assets/images/icons/capture-rebrand-camera-hq.svg @@ -1,3 +1,3 @@ - - + + diff --git a/src/assets/images/icons/capture-rebrand-camera-low.svg b/src/assets/images/icons/capture-rebrand-camera-low.svg index 805d96e50..f0202926c 100644 --- a/src/assets/images/icons/capture-rebrand-camera-low.svg +++ b/src/assets/images/icons/capture-rebrand-camera-low.svg @@ -1,3 +1,3 @@ - - + +