├── app ├── .gitignore ├── src │ └── main │ │ ├── res │ │ ├── mipmap-hdpi │ │ │ ├── ic_launcher.png │ │ │ └── ic_launcher_round.png │ │ ├── mipmap-mdpi │ │ │ ├── ic_launcher.png │ │ │ └── ic_launcher_round.png │ │ ├── mipmap-xhdpi │ │ │ ├── ic_launcher.png │ │ │ └── ic_launcher_round.png │ │ ├── mipmap-xxhdpi │ │ │ ├── ic_launcher.png │ │ │ └── ic_launcher_round.png │ │ ├── mipmap-xxxhdpi │ │ │ ├── ic_launcher.png │ │ │ └── ic_launcher_round.png │ │ ├── values │ │ │ ├── dimens.xml │ │ │ ├── styles.xml │ │ │ ├── colorful_all.xml │ │ │ ├── color_shades.xml │ │ │ ├── colors.xml │ │ │ └── strings.xml │ │ ├── xml │ │ │ └── fileprovider.xml │ │ ├── mipmap-anydpi-v26 │ │ │ ├── ic_launcher.xml │ │ │ └── ic_launcher_round.xml │ │ ├── layout │ │ │ ├── fragment_charts.xml │ │ │ ├── layout_chart_fragment.xml │ │ │ ├── activity_view_pager.xml │ │ │ ├── activity_main.xml │ │ │ ├── layout_price_formatter_chart_fragment.xml │ │ │ ├── fragment_chart_actions.xml │ │ │ ├── tooltip_layout.xml │ │ │ ├── fragment_custom_theme_chart.xml │ │ │ ├── fragment_chart_type.xml │ │ │ ├── fragment_range_switcher.xml │ │ │ └── fragment_chart_pricescale_actions.xml │ │ ├── drawable │ │ │ └── bg_tooltip.xml │ │ ├── menu │ │ │ ├── data_menu.xml │ │ │ └── navigation_menu.xml │ │ └── drawable-v24 │ │ │ └── ic_launcher_foreground.xml │ │ ├── java │ │ └── com │ │ │ └── tradingview │ │ │ └── lightweightcharts │ │ │ └── example │ │ │ └── app │ │ │ ├── view │ │ │ ├── util │ │ │ │ ├── ITitleFragment.kt │ │ │ │ ├── Tooltip.kt │ │ │ │ └── RandomeExt.kt │ │ │ ├── DebugChartsView.kt │ │ │ ├── charts │ │ │ │ └── RealTimeEmulationFragment.kt │ │ │ └── pager │ │ │ │ └── NestedScrollDelegate.kt │ │ │ ├── plugins │ │ │ ├── TickMarkFormatter.kt │ │ │ └── AutoscaleInfoProvider.kt │ │ │ ├── model │ │ │ └── Data.kt │ │ │ ├── router │ │ │ └── FragmentFactory.kt │ │ │ └── viewmodel │ │ │ ├── CustomThemesViewModel.kt │ │ │ ├── FloatingTooltipViewModel.kt │ │ │ ├── CustomPriceFormatterViewModel.kt │ │ │ ├── BarChartViewModel.kt │ │ │ ├── ViewPagerViewModel.kt │ │ │ ├── RealTimeEmulationViewModel.kt │ │ │ ├── VolumeStudyViewModel.kt │ │ │ ├── PriceLinesWithTitlesViewModel.kt │ │ │ └── RangesViewModel.kt │ │ ├── assets │ │ └── plugins │ │ │ ├── tick_mark_formatter.js │ │ │ └── autoscale_info_provider.js │ │ └── AndroidManifest.xml ├── proguard-rules.pro ├── google-services.json └── build.gradle.kts ├── lightweightlibrary ├── src │ └── main │ │ ├── AndroidManifest.xml │ │ ├── res │ │ └── values │ │ │ └── strings.xml │ │ ├── java │ │ └── com │ │ │ └── tradingview │ │ │ └── lightweightcharts │ │ │ ├── api │ │ │ ├── chart │ │ │ │ └── models │ │ │ │ │ ├── color │ │ │ │ │ ├── NoColor.kt │ │ │ │ │ ├── surface │ │ │ │ │ │ ├── SolidColor.kt │ │ │ │ │ │ ├── VerticalGradientColor.kt │ │ │ │ │ │ └── SurfaceColor.kt │ │ │ │ │ └── IntColor.kt │ │ │ │ │ └── ImageMimeType.kt │ │ │ ├── series │ │ │ │ ├── models │ │ │ │ │ ├── Point.kt │ │ │ │ │ ├── TimeRange.kt │ │ │ │ │ ├── BaseValueType.kt │ │ │ │ │ ├── BaseValuePrice.kt │ │ │ │ │ ├── SingleValueData.kt │ │ │ │ │ ├── WhitespaceData.kt │ │ │ │ │ ├── HistogramData.kt │ │ │ │ │ ├── LineData.kt │ │ │ │ │ ├── BarData.kt │ │ │ │ │ ├── OhlcData.kt │ │ │ │ │ ├── SeriesMarker.kt │ │ │ │ │ ├── AreaData.kt │ │ │ │ │ ├── MouseEventParams.kt │ │ │ │ │ ├── CandlestickData.kt │ │ │ │ │ ├── PriceFormat.kt │ │ │ │ │ ├── BarPrices.kt │ │ │ │ │ ├── PriceScaleId.kt │ │ │ │ │ ├── BaselineData.kt │ │ │ │ │ └── TouchMouseEventData.kt │ │ │ │ ├── enums │ │ │ │ │ ├── SeriesType.kt │ │ │ │ │ ├── SeriesMarkerPosition.kt │ │ │ │ │ ├── SeriesMarkerShape.kt │ │ │ │ │ ├── LineType.kt │ │ │ │ │ ├── LineWidth.kt │ │ │ │ │ ├── PriceLineSource.kt │ │ │ │ │ ├── CrosshairMode.kt │ │ │ │ │ ├── LineStyle.kt │ │ │ │ │ ├── PriceScaleMode.kt │ │ │ │ │ └── LastPriceAnimationMode.kt │ │ │ │ ├── common │ │ │ │ │ ├── SeriesData.kt │ │ │ │ │ ├── PriceLine.kt │ │ │ │ │ ├── PriceFormatter.kt │ │ │ │ │ ├── PriceFormatterDelegate.kt │ │ │ │ │ └── PriceLineDelegate.kt │ │ │ │ └── exception │ │ │ │ │ └── ColorParseException.kt │ │ │ ├── options │ │ │ │ ├── models │ │ │ │ │ ├── TrackingModeOptions.kt │ │ │ │ │ ├── HandleScrollOptions.kt │ │ │ │ │ ├── GridOptions.kt │ │ │ │ │ ├── PriceScaleMargins.kt │ │ │ │ │ ├── KineticScrollOptions.kt │ │ │ │ │ ├── CrosshairOptions.kt │ │ │ │ │ ├── GridLineOptions.kt │ │ │ │ │ ├── LayoutOptions.kt │ │ │ │ │ ├── LocalizationOptions.kt │ │ │ │ │ ├── CrosshairLineOptions.kt │ │ │ │ │ ├── PriceLineOptions.kt │ │ │ │ │ ├── WatermarkOptions.kt │ │ │ │ │ ├── HandleScaleOptions.kt │ │ │ │ │ ├── HistogramSeriesOptions.kt │ │ │ │ │ ├── ChartOptions.kt │ │ │ │ │ ├── BarSeriesOptions.kt │ │ │ │ │ ├── PriceScaleOptions.kt │ │ │ │ │ ├── TimeScaleOptions.kt │ │ │ │ │ ├── CandlestickSeriesOptions.kt │ │ │ │ │ └── LineSeriesOptions.kt │ │ │ │ ├── common │ │ │ │ │ ├── HistogramStyleOptions.kt │ │ │ │ │ ├── BarStyleOptions.kt │ │ │ │ │ ├── LineStyleOptions.kt │ │ │ │ │ ├── CandlestickStyleOptions.kt │ │ │ │ │ └── AreaStyleOptions.kt │ │ │ │ └── enums │ │ │ │ │ ├── PriceAxisPosition.kt │ │ │ │ │ ├── VerticalAlignment.kt │ │ │ │ │ ├── HorizontalAlignment.kt │ │ │ │ │ ├── PriceScaleMode.kt │ │ │ │ │ ├── MismatchDirection.kt │ │ │ │ │ └── TrackingModeExitMode.kt │ │ │ ├── serializer │ │ │ │ ├── Deserializer.kt │ │ │ │ ├── SizeDeserializer.kt │ │ │ │ ├── TimeDeserializer.kt │ │ │ │ ├── MouseEventParamsDeserializer.kt │ │ │ │ ├── ChartOptionsDeserializer.kt │ │ │ │ ├── ClassSimpleDeserializer.kt │ │ │ │ ├── PriceFormatterDeserializer.kt │ │ │ │ ├── SeriesTypeDeserializer.kt │ │ │ │ ├── BarSeriesOptionsDeserializer.kt │ │ │ │ ├── PriceLineOptionsDeserializer.kt │ │ │ │ ├── AreaSeriesOptionsDeserializer.kt │ │ │ │ ├── LineSeriesOptionsDeserializer.kt │ │ │ │ ├── PriceScaleOptionsDeserializer.kt │ │ │ │ ├── TimeScaleOptionsDeserializer.kt │ │ │ │ ├── HistogramSeriesOptionsDeserializer.kt │ │ │ │ ├── SeriesMarkersDeserializer.kt │ │ │ │ ├── CandlestickSeriesOptionsDeserializer.kt │ │ │ │ ├── BitmapDeserializer.kt │ │ │ │ ├── PrimitiveSerializer.kt │ │ │ │ ├── TimeRangeDeserializer.kt │ │ │ │ └── gson │ │ │ │ │ └── GsonProvider.kt │ │ │ ├── interfaces │ │ │ │ └── PriceScaleApi.kt │ │ │ └── delegates │ │ │ │ └── PriceScaleApiDelegate.kt │ │ │ ├── runtime │ │ │ ├── version │ │ │ │ └── ChartRuntimeObject.kt │ │ │ ├── plugins │ │ │ │ ├── Plugin.kt │ │ │ │ ├── Eval.kt │ │ │ │ ├── TimeFormatter.kt │ │ │ │ └── PriceFormatter.kt │ │ │ └── messaging │ │ │ │ ├── BridgeUnsubscribe.kt │ │ │ │ ├── BridgeFatalError.kt │ │ │ │ ├── ConnectionMessage.kt │ │ │ │ ├── BridgeFunctionResult.kt │ │ │ │ ├── BridgeSubscribeResult.kt │ │ │ │ ├── BridgeUnsubscribeResult.kt │ │ │ │ ├── BridgeFunction.kt │ │ │ │ ├── BridgeSubscription.kt │ │ │ │ ├── MessageType.kt │ │ │ │ └── BridgeMessage.kt │ │ │ ├── help │ │ │ └── JsonExtensions.kt │ │ │ ├── view │ │ │ ├── gesture │ │ │ │ └── TouchDelegate.kt │ │ │ └── WebSession.kt │ │ │ └── Logger.kt │ │ └── assets │ │ └── com │ │ └── tradingview │ │ └── lightweightcharts │ │ └── index.html ├── lib │ ├── app │ │ ├── series │ │ │ ├── line-cache.js │ │ │ ├── series-cache.js │ │ │ ├── price-formatter.js │ │ │ ├── line-service.js │ │ │ └── series-function-manager.js │ │ ├── price-scale │ │ │ ├── price-scale-cache.js │ │ │ ├── price-scale-function-manager.js │ │ │ ├── price-scale-instance.js │ │ │ └── price-scale-creation.js │ │ ├── time-scale │ │ │ ├── time-scale-function-manager.js │ │ │ └── tick-mark-formatter.js │ │ ├── logger.js │ │ ├── service-locator │ │ │ └── locator.js │ │ ├── price-scale-function-manager.js │ │ ├── plugin-manager.js │ │ └── index.js │ └── plugins │ │ ├── eval-plugin │ │ └── index.js │ │ ├── time-formatter │ │ └── index.js │ │ └── price-formatter │ │ └── index.js ├── .gitignore ├── consumer-rules.pro ├── webpack.config.js ├── proguard-rules.pro └── package.json ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── .gitignore ├── settings.gradle.kts ├── gradle.properties └── gradlew.bat /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /lightweightlibrary/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /lightweightlibrary/lib/app/series/line-cache.js: -------------------------------------------------------------------------------- 1 | export default class LineCache extends Map { 2 | 3 | } -------------------------------------------------------------------------------- /lightweightlibrary/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | /src/main/assets/com/tradingview/lightweightcharts/scripts/ 3 | /node_modules/ -------------------------------------------------------------------------------- /lightweightlibrary/consumer-rules.pro: -------------------------------------------------------------------------------- 1 | -keep class com.tradingview.lightweightcharts.** { 2 | public protected private *; 3 | } -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tradingview/lightweight-charts-android/HEAD/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /lightweightlibrary/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | LightweightLibrary 3 | 4 | -------------------------------------------------------------------------------- /lightweightlibrary/lib/plugins/eval-plugin/index.js: -------------------------------------------------------------------------------- 1 | window.evalPlugin = (evalParams) => { 2 | return new Function(`return(${evalParams.f})`)() 3 | } -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tradingview/lightweight-charts-android/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tradingview/lightweight-charts-android/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tradingview/lightweight-charts-android/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tradingview/lightweight-charts-android/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tradingview/lightweight-charts-android/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tradingview/lightweight-charts-android/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tradingview/lightweight-charts-android/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tradingview/lightweight-charts-android/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tradingview/lightweight-charts-android/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tradingview/lightweight-charts-android/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/values/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 120dp 4 | 60dp 5 | -------------------------------------------------------------------------------- /app/src/main/res/xml/fileprovider.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | -------------------------------------------------------------------------------- /lightweightlibrary/src/main/java/com/tradingview/lightweightcharts/api/chart/models/color/NoColor.kt: -------------------------------------------------------------------------------- 1 | package com.tradingview.lightweightcharts.api.chart.models.color 2 | 3 | object NoColor : Colorable 4 | -------------------------------------------------------------------------------- /lightweightlibrary/lib/app/price-scale/price-scale-cache.js: -------------------------------------------------------------------------------- 1 | /** 2 | * price scale cache 3 | * custom type for design custom methods 4 | */ 5 | export default class PriceScaleCache extends Map { 6 | 7 | } -------------------------------------------------------------------------------- /lightweightlibrary/src/main/java/com/tradingview/lightweightcharts/api/series/models/Point.kt: -------------------------------------------------------------------------------- 1 | package com.tradingview.lightweightcharts.api.series.models 2 | 3 | data class Point(val x: Float, val y: Float) 4 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .gradle 3 | /local.properties 4 | /.idea/* 5 | .idea 6 | .DS_Store 7 | /build 8 | /captures 9 | .externalNativeBuild 10 | .cxx 11 | .kotlin 12 | 13 | 14 | /node_modules 15 | package-lock.json -------------------------------------------------------------------------------- /lightweightlibrary/src/main/java/com/tradingview/lightweightcharts/api/series/models/TimeRange.kt: -------------------------------------------------------------------------------- 1 | package com.tradingview.lightweightcharts.api.series.models 2 | 3 | data class TimeRange(val from: Time, val to: Time) 4 | -------------------------------------------------------------------------------- /lightweightlibrary/src/main/java/com/tradingview/lightweightcharts/api/series/enums/SeriesType.kt: -------------------------------------------------------------------------------- 1 | package com.tradingview.lightweightcharts.api.series.enums 2 | 3 | enum class SeriesType { 4 | LINE, AREA, CANDLESTICK, BAR, HISTOGRAM 5 | } 6 | -------------------------------------------------------------------------------- /lightweightlibrary/src/main/java/com/tradingview/lightweightcharts/runtime/version/ChartRuntimeObject.kt: -------------------------------------------------------------------------------- 1 | package com.tradingview.lightweightcharts.runtime.version 2 | 3 | internal interface ChartRuntimeObject { 4 | fun getVersion(): Int 5 | } 6 | -------------------------------------------------------------------------------- /app/src/main/java/com/tradingview/lightweightcharts/example/app/view/util/ITitleFragment.kt: -------------------------------------------------------------------------------- 1 | package com.tradingview.lightweightcharts.example.app.view.util 2 | 3 | interface ITitleFragment { 4 | 5 | val fragmentTitleRes: Int? get() = null 6 | } 7 | -------------------------------------------------------------------------------- /lightweightlibrary/src/main/java/com/tradingview/lightweightcharts/api/series/models/BaseValueType.kt: -------------------------------------------------------------------------------- 1 | package com.tradingview.lightweightcharts.api.series.models 2 | 3 | /** 4 | * Represents a type of a base value of baseline series type. 5 | */ 6 | interface BaseValueType 7 | -------------------------------------------------------------------------------- /lightweightlibrary/src/main/assets/com/tradingview/lightweightcharts/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Fri Jan 15 17:33:46 MSK 2021 2 | distributionBase=GRADLE_USER_HOME 3 | distributionPath=wrapper/dists 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-bin.zip 7 | -------------------------------------------------------------------------------- /lightweightlibrary/src/main/java/com/tradingview/lightweightcharts/api/series/common/SeriesData.kt: -------------------------------------------------------------------------------- 1 | package com.tradingview.lightweightcharts.api.series.common 2 | 3 | import com.tradingview.lightweightcharts.api.series.models.Time 4 | 5 | interface SeriesData { 6 | val time: Time 7 | } 8 | -------------------------------------------------------------------------------- /lightweightlibrary/src/main/java/com/tradingview/lightweightcharts/api/series/exception/ColorParseException.kt: -------------------------------------------------------------------------------- 1 | package com.tradingview.lightweightcharts.api.series.exception 2 | 3 | import java.lang.RuntimeException 4 | 5 | class ColorParseException(message: String) : RuntimeException(message) 6 | -------------------------------------------------------------------------------- /app/src/main/assets/plugins/tick_mark_formatter.js: -------------------------------------------------------------------------------- 1 | window.tickMarkFormatter = (pluginParams) => { 2 | return (time, tickMarkType, locale) => { 3 | const year = LightweightCharts.isBusinessDay(time) ? time.year : new Date(time * 1000).getUTCFullYear() 4 | return String(year) 5 | } 6 | } -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /lightweightlibrary/src/main/java/com/tradingview/lightweightcharts/api/options/models/TrackingModeOptions.kt: -------------------------------------------------------------------------------- 1 | package com.tradingview.lightweightcharts.api.options.models 2 | 3 | import com.tradingview.lightweightcharts.api.options.enums.TrackingModeExitMode 4 | 5 | data class TrackingModeOptions( 6 | var exitMode: TrackingModeExitMode 7 | ) 8 | -------------------------------------------------------------------------------- /lightweightlibrary/src/main/java/com/tradingview/lightweightcharts/api/options/common/HistogramStyleOptions.kt: -------------------------------------------------------------------------------- 1 | package com.tradingview.lightweightcharts.api.options.common 2 | 3 | import com.tradingview.lightweightcharts.api.chart.models.color.IntColor 4 | 5 | interface HistogramStyleOptions { 6 | val color: IntColor? 7 | val base: Float? 8 | } 9 | -------------------------------------------------------------------------------- /app/src/main/assets/plugins/autoscale_info_provider.js: -------------------------------------------------------------------------------- 1 | window.autoscaleInfoProvider = (pluginParams) => { 2 | return (original) => { 3 | var res = original(); 4 | if (res.priceRange !== null) { 5 | res.priceRange.minValue -= 10; 6 | res.priceRange.maxValue += 10; 7 | } 8 | return res; 9 | } 10 | } -------------------------------------------------------------------------------- /app/src/main/java/com/tradingview/lightweightcharts/example/app/plugins/TickMarkFormatter.kt: -------------------------------------------------------------------------------- 1 | package com.tradingview.lightweightcharts.example.app.plugins 2 | 3 | import com.tradingview.lightweightcharts.runtime.plugins.Plugin 4 | 5 | class TickMarkFormatter : Plugin( 6 | name = "tickMarkFormatter", 7 | file = "/android_asset/plugins/tick_mark_formatter.js" 8 | ) 9 | -------------------------------------------------------------------------------- /lightweightlibrary/src/main/java/com/tradingview/lightweightcharts/runtime/plugins/Plugin.kt: -------------------------------------------------------------------------------- 1 | package com.tradingview.lightweightcharts.runtime.plugins 2 | 3 | import java.util.* 4 | 5 | open class Plugin( 6 | val uuid: String = UUID.randomUUID().toString(), 7 | val name: String, 8 | val file: String, 9 | val configurationParams: Any? = null 10 | ) 11 | -------------------------------------------------------------------------------- /lightweightlibrary/lib/app/series/series-cache.js: -------------------------------------------------------------------------------- 1 | export default class SeriesCache extends Map { 2 | getKeyOfSeries(seriesObject) { 3 | for (let [key, value] of this.entries()) { 4 | if (Object.is(value, seriesObject)) { 5 | return key; 6 | } 7 | } 8 | throw new Error("Series is not found"); 9 | } 10 | } -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_charts.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/java/com/tradingview/lightweightcharts/example/app/plugins/AutoscaleInfoProvider.kt: -------------------------------------------------------------------------------- 1 | package com.tradingview.lightweightcharts.example.app.plugins 2 | 3 | import com.tradingview.lightweightcharts.runtime.plugins.Plugin 4 | 5 | class AutoscaleInfoProvider : Plugin( 6 | name = "autoscaleInfoProvider", 7 | file = "/android_asset/plugins/autoscale_info_provider.js" 8 | ) 9 | -------------------------------------------------------------------------------- /app/src/main/java/com/tradingview/lightweightcharts/example/app/model/Data.kt: -------------------------------------------------------------------------------- 1 | package com.tradingview.lightweightcharts.example.app.model 2 | 3 | import com.tradingview.lightweightcharts.api.series.common.SeriesData 4 | import com.tradingview.lightweightcharts.api.series.enums.SeriesType 5 | 6 | data class Data( 7 | val list: List, 8 | val type: SeriesType 9 | ) 10 | -------------------------------------------------------------------------------- /lightweightlibrary/src/main/java/com/tradingview/lightweightcharts/runtime/messaging/BridgeUnsubscribe.kt: -------------------------------------------------------------------------------- 1 | package com.tradingview.lightweightcharts.runtime.messaging 2 | 3 | class BridgeUnsubscribe( 4 | functionName: String, 5 | uuid: String 6 | ) : BridgeMessage( 7 | MessageType.UNSUBSCRIBE, 8 | Data( 9 | uuid = uuid, 10 | fn = functionName 11 | ) 12 | ) 13 | -------------------------------------------------------------------------------- /lightweightlibrary/src/main/java/com/tradingview/lightweightcharts/runtime/messaging/BridgeFatalError.kt: -------------------------------------------------------------------------------- 1 | package com.tradingview.lightweightcharts.runtime.messaging 2 | 3 | class BridgeFatalError( 4 | bridgeMessage: BridgeMessage 5 | ) : BridgeMessage(bridgeMessage.messageType, bridgeMessage.data) { 6 | val uuid: String get() = data.uuid 7 | val message: String get() = data.message!! 8 | } 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_tooltip.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 10 | 11 | -------------------------------------------------------------------------------- /lightweightlibrary/src/main/java/com/tradingview/lightweightcharts/runtime/plugins/Eval.kt: -------------------------------------------------------------------------------- 1 | package com.tradingview.lightweightcharts.runtime.plugins 2 | 3 | class Eval(val function: String) : Plugin( 4 | name = "evalPlugin", 5 | file = "scripts/plugins/eval-plugin/main.js", 6 | configurationParams = EvalParams(function) 7 | ) 8 | 9 | data class EvalParams( 10 | val f: String 11 | ) 12 | -------------------------------------------------------------------------------- /lightweightlibrary/src/main/java/com/tradingview/lightweightcharts/runtime/messaging/ConnectionMessage.kt: -------------------------------------------------------------------------------- 1 | package com.tradingview.lightweightcharts.runtime.messaging 2 | 3 | import java.util.* 4 | 5 | class ConnectionMessage(logLevel: LogLevel) : BridgeMessage( 6 | MessageType.CONNECTION, 7 | Data( 8 | uuid = UUID.randomUUID().toString(), 9 | logLevel = logLevel 10 | ) 11 | ) 12 | -------------------------------------------------------------------------------- /lightweightlibrary/src/main/java/com/tradingview/lightweightcharts/api/options/common/BarStyleOptions.kt: -------------------------------------------------------------------------------- 1 | package com.tradingview.lightweightcharts.api.options.common 2 | 3 | import com.tradingview.lightweightcharts.api.chart.models.color.IntColor 4 | 5 | interface BarStyleOptions { 6 | val upColor: IntColor? 7 | val downColor: IntColor? 8 | val openVisible: Boolean? 9 | val thinBars: Boolean? 10 | } 11 | -------------------------------------------------------------------------------- /lightweightlibrary/src/main/java/com/tradingview/lightweightcharts/api/options/enums/PriceAxisPosition.kt: -------------------------------------------------------------------------------- 1 | package com.tradingview.lightweightcharts.api.options.enums 2 | 3 | import com.google.gson.annotations.SerializedName 4 | 5 | enum class PriceAxisPosition { 6 | @SerializedName("left") 7 | LEFT, 8 | 9 | @SerializedName("right") 10 | RIGHT, 11 | 12 | @SerializedName("none") 13 | NONE 14 | } 15 | -------------------------------------------------------------------------------- /lightweightlibrary/src/main/java/com/tradingview/lightweightcharts/api/chart/models/ImageMimeType.kt: -------------------------------------------------------------------------------- 1 | package com.tradingview.lightweightcharts.api.chart.models 2 | 3 | import com.google.gson.annotations.SerializedName 4 | 5 | enum class ImageMimeType { 6 | @SerializedName("image/jpeg") 7 | JPEG, 8 | 9 | @SerializedName("image/png") 10 | PNG, 11 | 12 | @SerializedName("image/webp") 13 | WEBP 14 | } 15 | -------------------------------------------------------------------------------- /lightweightlibrary/src/main/java/com/tradingview/lightweightcharts/api/options/enums/VerticalAlignment.kt: -------------------------------------------------------------------------------- 1 | package com.tradingview.lightweightcharts.api.options.enums 2 | 3 | import com.google.gson.annotations.SerializedName 4 | 5 | enum class VerticalAlignment { 6 | @SerializedName("top") 7 | TOP, 8 | 9 | @SerializedName("center") 10 | CENTER, 11 | 12 | @SerializedName("bottom") 13 | BOTTOM 14 | } 15 | -------------------------------------------------------------------------------- /lightweightlibrary/src/main/java/com/tradingview/lightweightcharts/api/options/enums/HorizontalAlignment.kt: -------------------------------------------------------------------------------- 1 | package com.tradingview.lightweightcharts.api.options.enums 2 | 3 | import com.google.gson.annotations.SerializedName 4 | 5 | enum class HorizontalAlignment { 6 | @SerializedName("left") 7 | LEFT, 8 | 9 | @SerializedName("center") 10 | CENTER, 11 | 12 | @SerializedName("right") 13 | RIGHT 14 | } 15 | -------------------------------------------------------------------------------- /app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /lightweightlibrary/src/main/java/com/tradingview/lightweightcharts/api/series/enums/SeriesMarkerPosition.kt: -------------------------------------------------------------------------------- 1 | package com.tradingview.lightweightcharts.api.series.enums 2 | 3 | import com.google.gson.annotations.SerializedName 4 | 5 | enum class SeriesMarkerPosition { 6 | @SerializedName("aboveBar") 7 | ABOVE_BAR, 8 | 9 | @SerializedName("belowBar") 10 | BELOW_BAR, 11 | 12 | @SerializedName("inBar") 13 | IN_BAR, 14 | } 15 | -------------------------------------------------------------------------------- /app/src/main/res/menu/data_menu.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 9 | 12 | -------------------------------------------------------------------------------- /lightweightlibrary/src/main/java/com/tradingview/lightweightcharts/api/series/models/BaseValuePrice.kt: -------------------------------------------------------------------------------- 1 | package com.tradingview.lightweightcharts.api.series.models 2 | 3 | /** 4 | * Represents a type of priced base value of baseline series type. 5 | */ 6 | data class BaseValuePrice( 7 | val price: Int, 8 | val type: BaseValuePriceType = BaseValuePriceType.PRICE 9 | ) : BaseValueType 10 | 11 | enum class BaseValuePriceType { 12 | PRICE 13 | } 14 | -------------------------------------------------------------------------------- /lightweightlibrary/webpack.config.js: -------------------------------------------------------------------------------- 1 | const path = require('path'); 2 | 3 | const config = { 4 | mode: "production", 5 | optimization: { 6 | minimize: false 7 | }, 8 | resolve: { 9 | alias: { 10 | lightweight$: path.resolve(__dirname, './node_modules/lightweight-charts/dist/lightweight-charts.development.cjs'), 11 | }, 12 | }, 13 | }; 14 | 15 | module.exports = () => { 16 | return config; 17 | }; 18 | -------------------------------------------------------------------------------- /app/src/main/java/com/tradingview/lightweightcharts/example/app/router/FragmentFactory.kt: -------------------------------------------------------------------------------- 1 | package com.tradingview.lightweightcharts.example.app.router 2 | 3 | import android.os.Bundle 4 | import androidx.fragment.app.Fragment 5 | 6 | object FragmentFactory { 7 | fun getInstance(clazz: Class, bundle: Bundle? = null): T { 8 | val fragment = clazz.newInstance() 9 | fragment.arguments = bundle 10 | return fragment 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /lightweightlibrary/src/main/java/com/tradingview/lightweightcharts/api/options/enums/PriceScaleMode.kt: -------------------------------------------------------------------------------- 1 | package com.tradingview.lightweightcharts.api.options.enums 2 | 3 | import com.google.gson.annotations.SerializedName 4 | 5 | enum class PriceScaleMode { 6 | @SerializedName("0") 7 | NORMAL, 8 | 9 | @SerializedName("1") 10 | LOGARITHMIC, 11 | 12 | @SerializedName("2") 13 | PERCENTAGE, 14 | 15 | @SerializedName("3") 16 | INDEXED_TO_100 17 | } 18 | -------------------------------------------------------------------------------- /lightweightlibrary/src/main/java/com/tradingview/lightweightcharts/api/series/models/SingleValueData.kt: -------------------------------------------------------------------------------- 1 | package com.tradingview.lightweightcharts.api.series.models 2 | 3 | import com.tradingview.lightweightcharts.api.series.common.SeriesData 4 | 5 | interface SingleValueData : SeriesData { 6 | 7 | /** 8 | * The time of the data. 9 | */ 10 | override val time: Time 11 | 12 | /** 13 | * Price value of data item 14 | */ 15 | val value: Float 16 | } 17 | -------------------------------------------------------------------------------- /lightweightlibrary/src/main/java/com/tradingview/lightweightcharts/api/series/models/WhitespaceData.kt: -------------------------------------------------------------------------------- 1 | package com.tradingview.lightweightcharts.api.series.models 2 | 3 | import com.tradingview.lightweightcharts.api.series.common.SeriesData 4 | 5 | /** 6 | * Represents a whitespace data item, which is a data point without a value 7 | */ 8 | data class WhitespaceData( 9 | /** 10 | * The time of the data. 11 | */ 12 | override val time: Time 13 | ) : SeriesData 14 | -------------------------------------------------------------------------------- /lightweightlibrary/src/main/java/com/tradingview/lightweightcharts/api/serializer/Deserializer.kt: -------------------------------------------------------------------------------- 1 | package com.tradingview.lightweightcharts.api.serializer 2 | 3 | import com.google.gson.Gson 4 | import com.google.gson.JsonElement 5 | import com.tradingview.lightweightcharts.api.serializer.gson.GsonProvider 6 | 7 | abstract class Deserializer { 8 | 9 | protected open val gson: Gson by lazy { GsonProvider.newInstance() } 10 | 11 | abstract fun deserialize(json: JsonElement): T? 12 | } 13 | -------------------------------------------------------------------------------- /lightweightlibrary/src/main/java/com/tradingview/lightweightcharts/api/series/enums/SeriesMarkerShape.kt: -------------------------------------------------------------------------------- 1 | package com.tradingview.lightweightcharts.api.series.enums 2 | 3 | import com.google.gson.annotations.SerializedName 4 | 5 | enum class SeriesMarkerShape { 6 | @SerializedName("circle") 7 | CIRCLE, 8 | 9 | @SerializedName("square") 10 | SQUARE, 11 | 12 | @SerializedName("arrowUp") 13 | ARROW_UP, 14 | 15 | @SerializedName("arrowDown") 16 | ARROW_DOWN 17 | } 18 | -------------------------------------------------------------------------------- /lightweightlibrary/src/main/java/com/tradingview/lightweightcharts/api/serializer/SizeDeserializer.kt: -------------------------------------------------------------------------------- 1 | package com.tradingview.lightweightcharts.api.serializer 2 | 3 | import android.util.SizeF 4 | import com.google.gson.JsonElement 5 | 6 | class SizeDeserializer : Deserializer() { 7 | override fun deserialize(json: JsonElement): SizeF { 8 | val width = json.asJsonObject["width"].asFloat 9 | val height = json.asJsonObject["height"].asFloat 10 | return SizeF(width, height) 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /lightweightlibrary/src/main/java/com/tradingview/lightweightcharts/api/series/models/HistogramData.kt: -------------------------------------------------------------------------------- 1 | package com.tradingview.lightweightcharts.api.series.models 2 | 3 | import com.tradingview.lightweightcharts.api.chart.models.color.IntColor 4 | 5 | data class HistogramData( 6 | override val time: Time, 7 | override val value: Float, 8 | /** 9 | * Optional color value for certain data item. If missed, color from HistogramSeriesOptions is used 10 | */ 11 | val color: IntColor? = null 12 | ) : SingleValueData 13 | -------------------------------------------------------------------------------- /lightweightlibrary/src/main/java/com/tradingview/lightweightcharts/runtime/messaging/BridgeFunctionResult.kt: -------------------------------------------------------------------------------- 1 | package com.tradingview.lightweightcharts.runtime.messaging 2 | 3 | import com.google.gson.JsonElement 4 | import com.google.gson.JsonNull 5 | 6 | class BridgeFunctionResult( 7 | bridgeMessage: BridgeMessage 8 | ) : BridgeMessage( 9 | bridgeMessage.messageType, 10 | bridgeMessage.data 11 | ) { 12 | val uuid: String get() = data.uuid 13 | val result: JsonElement get() = data.result ?: JsonNull.INSTANCE 14 | } 15 | -------------------------------------------------------------------------------- /lightweightlibrary/src/main/java/com/tradingview/lightweightcharts/runtime/messaging/BridgeSubscribeResult.kt: -------------------------------------------------------------------------------- 1 | package com.tradingview.lightweightcharts.runtime.messaging 2 | 3 | import com.google.gson.JsonElement 4 | import com.google.gson.JsonNull 5 | 6 | class BridgeSubscribeResult( 7 | bridgeMessage: BridgeMessage 8 | ) : BridgeMessage( 9 | bridgeMessage.messageType, 10 | bridgeMessage.data 11 | ) { 12 | val uuid: String get() = data.uuid 13 | val result: JsonElement get() = data.result ?: JsonNull.INSTANCE 14 | } 15 | -------------------------------------------------------------------------------- /lightweightlibrary/src/main/java/com/tradingview/lightweightcharts/runtime/messaging/BridgeUnsubscribeResult.kt: -------------------------------------------------------------------------------- 1 | package com.tradingview.lightweightcharts.runtime.messaging 2 | 3 | import com.google.gson.JsonElement 4 | import com.google.gson.JsonNull 5 | 6 | class BridgeUnsubscribeResult( 7 | bridgeMessage: BridgeMessage 8 | ) : BridgeMessage( 9 | bridgeMessage.messageType, 10 | bridgeMessage.data 11 | ) { 12 | val uuid: String get() = data.uuid 13 | val result: JsonElement get() = data.result ?: JsonNull.INSTANCE 14 | } 15 | -------------------------------------------------------------------------------- /lightweightlibrary/src/main/java/com/tradingview/lightweightcharts/api/options/models/HandleScrollOptions.kt: -------------------------------------------------------------------------------- 1 | package com.tradingview.lightweightcharts.api.options.models 2 | 3 | data class HandleScrollOptions( 4 | var mouseWheel: Boolean? = null, 5 | var pressedMouseMove: Boolean? = null, 6 | var horzTouchDrag: Boolean? = null, 7 | var vertTouchDrag: Boolean? = null 8 | ) 9 | 10 | inline fun handleScrollOptions(init: HandleScrollOptions.() -> Unit): HandleScrollOptions { 11 | return HandleScrollOptions().apply(init) 12 | } 13 | -------------------------------------------------------------------------------- /lightweightlibrary/lib/app/time-scale/time-scale-function-manager.js: -------------------------------------------------------------------------------- 1 | import TimeScaleInstanceService from "./time-scale-instance"; 2 | 3 | export default class TimeScaleFunctionManager { 4 | 5 | /** 6 | * 7 | * @param {ServiceLocator} locator 8 | */ 9 | constructor(locator) { 10 | /** @type {TimeScaleInstanceService} */ 11 | this.timeScaleInstanceService = locator.resolve(TimeScaleInstanceService.name); 12 | } 13 | 14 | register() { 15 | this.timeScaleInstanceService.register(); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /lightweightlibrary/src/main/java/com/tradingview/lightweightcharts/runtime/messaging/BridgeFunction.kt: -------------------------------------------------------------------------------- 1 | package com.tradingview.lightweightcharts.runtime.messaging 2 | 3 | import java.util.* 4 | 5 | class BridgeFunction( 6 | functionName: String, 7 | functionParams: Map = emptyMap() 8 | ) : BridgeMessage( 9 | MessageType.FUNCTION, 10 | Data( 11 | fn = functionName, 12 | uuid = UUID.randomUUID().toString(), 13 | params = functionParams 14 | ) 15 | ) { 16 | val uuid: String get() = data.uuid 17 | } 18 | -------------------------------------------------------------------------------- /lightweightlibrary/src/main/java/com/tradingview/lightweightcharts/runtime/messaging/BridgeSubscription.kt: -------------------------------------------------------------------------------- 1 | package com.tradingview.lightweightcharts.runtime.messaging 2 | 3 | import java.util.* 4 | 5 | class BridgeSubscription( 6 | functionName: String, 7 | functionParams: Map = emptyMap() 8 | ) : BridgeMessage( 9 | MessageType.SUBSCRIBE, 10 | Data( 11 | uuid = UUID.randomUUID().toString(), 12 | fn = functionName, 13 | params = functionParams 14 | ) 15 | ) { 16 | val uuid: String get() = data.uuid 17 | } 18 | -------------------------------------------------------------------------------- /lightweightlibrary/src/main/java/com/tradingview/lightweightcharts/api/options/enums/MismatchDirection.kt: -------------------------------------------------------------------------------- 1 | package com.tradingview.lightweightcharts.api.options.enums 2 | 3 | /** 4 | * Search direction if no data found at provided index 5 | */ 6 | enum class MismatchDirection(val value: Int) { 7 | 8 | /** 9 | * Search the nearest left item 10 | */ 11 | NearestLeft(-1), 12 | 13 | /** 14 | * Do not search 15 | */ 16 | None(0), 17 | 18 | /** 19 | * Search the nearest right item 20 | */ 21 | NearestRight(1), 22 | } 23 | -------------------------------------------------------------------------------- /lightweightlibrary/src/main/java/com/tradingview/lightweightcharts/runtime/plugins/TimeFormatter.kt: -------------------------------------------------------------------------------- 1 | package com.tradingview.lightweightcharts.runtime.plugins 2 | 3 | class TimeFormatter(locale: String, dateTimeFormat: DateTimeFormat) : Plugin( 4 | name = "timeFormatter", 5 | file = "scripts/plugins/time-formatter/main.js", 6 | configurationParams = TimeFormatterParams(locale, dateTimeFormat) 7 | ) 8 | 9 | data class TimeFormatterParams( 10 | val locale: String, 11 | val dateTimeFormat: DateTimeFormat 12 | ) 13 | 14 | enum class DateTimeFormat { 15 | DATE, TIME, DATE_TIME 16 | } 17 | -------------------------------------------------------------------------------- /lightweightlibrary/src/main/java/com/tradingview/lightweightcharts/api/options/models/GridOptions.kt: -------------------------------------------------------------------------------- 1 | package com.tradingview.lightweightcharts.api.options.models 2 | 3 | /** 4 | * Structure describing grid options 5 | */ 6 | data class GridOptions( 7 | /** 8 | * Vertical grid line options 9 | */ 10 | var vertLines: GridLineOptions? = null, 11 | 12 | /** 13 | * Horizontal grid line options 14 | */ 15 | var horzLines: GridLineOptions? = null 16 | ) 17 | 18 | inline fun gridOptions(init: GridOptions.() -> Unit): GridOptions { 19 | return GridOptions().apply(init) 20 | } 21 | -------------------------------------------------------------------------------- /lightweightlibrary/src/main/java/com/tradingview/lightweightcharts/api/serializer/TimeDeserializer.kt: -------------------------------------------------------------------------------- 1 | package com.tradingview.lightweightcharts.api.serializer 2 | 3 | import com.google.gson.JsonElement 4 | import com.google.gson.JsonSyntaxException 5 | import com.tradingview.lightweightcharts.api.series.models.Time 6 | 7 | class TimeDeserializer : Deserializer