├── 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 |
--------------------------------------------------------------------------------
/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