Code view:

A painting is a person's account of this edit as text, recorded independently of the node mapping - a rendering often has several equally defensible answers where the mapping has one. Deletions and insertions carry no position on the opposite side in a painting, so that panel draws no caret for them.

Before

1/*
2 * Nextcloud - Android Client
3 *
4 * SPDX-FileCopyrightText: 2019 Chris Narkiewicz <hello@ezaquarii.com>
5 * SPDX-License-Identifier: AGPL-3.0-or-later OR GPL-2.0-only
6 */
7package com.nextcloud.client.etm
8
9import android.content.Context
10import android.content.Intent
11import android.os.Bundle
12import android.view.MenuItem
13import androidx.activity.OnBackPressedCallback
14import androidx.lifecycle.Observer
15import androidx.lifecycle.ViewModelProvider
16import com.nextcloud.client.di.Injectable
17import com.nextcloud.client.di.ViewModelFactory
18import com.owncloud.android.R
19import com.owncloud.android.ui.activity.ToolbarActivity
20import javax.inject.Inject
21
22class EtmActivity :
23 ToolbarActivity(),
24 Injectable {
25
26 companion object {
27 @JvmStatic
28 fun launch(context: Context) {
29 val etmIntent = Intent(context, EtmActivity::class.java)
30 context.startActivity(etmIntent)
31 }
32 }
33
34 @Inject
35 lateinit var viewModelFactory: ViewModelFactory
36 internal lateinit var vm: EtmViewModel
37
38 override fun onCreate(savedInstanceState: Bundle?) {
39 super.onCreate(savedInstanceState)
40 setContentView(R.layout.activity_etm)
41 setupToolbar()
42 updateActionBarTitleAndHomeButtonByString(getString(R.string.etm_title))
43 vm = ViewModelProvider(this, viewModelFactory).get(EtmViewModel::class.java)
44 vm.currentPage.observe(
45 this,
46 Observer {
47 onPageChanged(it)
48 }
49 )
50 handleOnBackPressed()
51 }
52
53 override fun onOptionsItemSelected(item: MenuItem): Boolean = when (item.itemId) {
54 android.R.id.home -> {
55 if (!vm.onBackPressed()) {
56 finish()
57 }
58 true
59 }
60 else -> super.onOptionsItemSelected(item)
61 }
62
63 private fun handleOnBackPressed() {
64 onBackPressedDispatcher.addCallback(object : OnBackPressedCallback(true) {
65 override fun handleOnBackPressed() {
66 val handledByVm = vm.onBackPressed()
67
68 if (!handledByVm) {
69 isEnabled = false
70 onBackPressedDispatcher.onBackPressed()
71 }
72 }
73 })
74 }
75
76 private fun onPageChanged(page: EtmMenuEntry?) {
77 if (page != null) {
78 val fragment = page.pageClass.java.getConstructor().newInstance()
79 supportFragmentManager.beginTransaction()
80 .replace(R.id.etm_page_container, fragment)
81 .commit()
82 updateActionBarTitleAndHomeButtonByString("ETM - ${getString(page.titleRes)}")
83 } else {
84 supportFragmentManager.beginTransaction()
85 .replace(R.id.etm_page_container, EtmMenuFragment())
86 .commitNow()
87 updateActionBarTitleAndHomeButtonByString(getString(R.string.etm_title))
88 }
89 }
90}
91

After

1/*
2 * Nextcloud - Android Client
3 *
4 * SPDX-FileCopyrightText: 2019 Chris Narkiewicz <hello@ezaquarii.com>
5 * SPDX-License-Identifier: AGPL-3.0-or-later OR GPL-2.0-only
6 */
7package com.nextcloud.client.etm
8
9import android.content.Context
10import android.content.Intent
11import android.os.Bundle
12import android.view.MenuItem
13import androidx.activity.OnBackPressedCallback
14import androidx.lifecycle.Observer
15import androidx.lifecycle.ViewModelProvider
16import com.nextcloud.client.di.Injectable
17import com.nextcloud.client.di.ViewModelFactory
18import com.owncloud.android.R
19import com.owncloud.android.ui.activity.ToolbarActivity
20import javax.inject.Inject
21
22class EtmActivity :
23 ToolbarActivity(),
24 Injectable {
25
26 companion object {
27 @JvmStatic
28 fun launch(context: Context) {
29 val etmIntent = Intent(context, EtmActivity::class.java)
30 context.startActivity(etmIntent)
31 }
32 }
33
34 @Inject
35 lateinit var viewModelFactory: ViewModelFactory
36 internal lateinit var vm: EtmViewModel
37
38 override fun onCreate(savedInstanceState: Bundle?) {
39 super.onCreate(savedInstanceState)
40 setContentView(R.layout.activity_etm)
41 setupToolbar()
42 updateActionBarTitleAndHomeButtonByString(getString(R.string.etm_title))
43 vm = ViewModelProvider(this, viewModelFactory).get(EtmViewModel::class.java)
44 vm.currentPage.observe(
45 this,
46 Observer {
47 onPageChanged(it)
48 }
49 )
50 handleOnBackPressed()
51 }
52
53 override fun onOptionsItemSelected(item: MenuItem): Boolean = when (item.itemId) {
54 android.R.id.home -> {
55 if (!vm.onBackPressed()) {
56 finish()
57 }
58 true
59 }
60
61 else -> super.onOptionsItemSelected(item)
62 }
63
64 private fun handleOnBackPressed() {
65 onBackPressedDispatcher.addCallback(object : OnBackPressedCallback(true) {
66 override fun handleOnBackPressed() {
67 val handledByVm = vm.onBackPressed()
68
69 if (!handledByVm) {
70 isEnabled = false
71 onBackPressedDispatcher.onBackPressed()
72 }
73 }
74 })
75 }
76
77 private fun onPageChanged(page: EtmMenuEntry?) {
78 if (page != null) {
79 val fragment = page.pageClass.java.getConstructor().newInstance()
80 supportFragmentManager.beginTransaction()
81 .replace(R.id.etm_page_container, fragment)
82 .commit()
83 updateActionBarTitleAndHomeButtonByString("ETM - ${getString(page.titleRes)}")
84 } else {
85 supportFragmentManager.beginTransaction()
86 .replace(R.id.etm_page_container, EtmMenuFragment())
87 .commitNow()
88 updateActionBarTitleAndHomeButtonByString(getString(R.string.etm_title))
89 }
90 }
91}
92

Before

source_file
block_comment "/*\n * Nextcloud - Android Client\n *\n * SPDX-FileCopyrightTex"...
package_header
package "package"
qualified_identifier
identifier "com"
. "."
identifier "nextcloud"
. "."
identifier "client"
. "."
identifier "etm"
import
import "import"
qualified_identifier
identifier "android"
. "."
identifier "content"
. "."
identifier "Context"
import
import "import"
qualified_identifier
identifier "android"
. "."
identifier "content"
. "."
identifier "Intent"
import
import "import"
qualified_identifier
identifier "android"
. "."
identifier "os"
. "."
identifier "Bundle"
import
import "import"
qualified_identifier
identifier "android"
. "."
identifier "view"
. "."
identifier "MenuItem"
import
import "import"
qualified_identifier
identifier "androidx"
. "."
identifier "activity"
. "."
identifier "OnBackPressedCallback"
import
import "import"
qualified_identifier
identifier "androidx"
. "."
identifier "lifecycle"
. "."
identifier "Observer"
import
import "import"
qualified_identifier
identifier "androidx"
. "."
identifier "lifecycle"
. "."
identifier "ViewModelProvider"
import
import "import"
qualified_identifier
identifier "com"
. "."
identifier "nextcloud"
. "."
identifier "client"
. "."
identifier "di"
. "."
identifier "Injectable"
import
import "import"
qualified_identifier
identifier "com"
. "."
identifier "nextcloud"
. "."
identifier "client"
. "."
identifier "di"
. "."
identifier "ViewModelFactory"
import
import "import"
qualified_identifier
identifier "com"
. "."
identifier "owncloud"
. "."
identifier "android"
. "."
identifier "R"
import
import "import"
qualified_identifier
identifier "com"
. "."
identifier "owncloud"
. "."
identifier "android"
. "."
identifier "ui"
. "."
identifier "activity"
. "."
identifier "ToolbarActivity"
import
import "import"
qualified_identifier
identifier "javax"
. "."
identifier "inject"
. "."
identifier "Inject"
class_declaration (+574 nodes collapsed)

After

source_file
block_comment "/*\n * Nextcloud - Android Client\n *\n * SPDX-FileCopyrightTex"...
package_header
package "package"
qualified_identifier
identifier "com"
. "."
identifier "nextcloud"
. "."
identifier "client"
. "."
identifier "etm"
import
import "import"
qualified_identifier
identifier "android"
. "."
identifier "content"
. "."
identifier "Context"
import
import "import"
qualified_identifier
identifier "android"
. "."
identifier "content"
. "."
identifier "Intent"
import
import "import"
qualified_identifier
identifier "android"
. "."
identifier "os"
. "."
identifier "Bundle"
import
import "import"
qualified_identifier
identifier "android"
. "."
identifier "view"
. "."
identifier "MenuItem"
import
import "import"
qualified_identifier
identifier "androidx"
. "."
identifier "activity"
. "."
identifier "OnBackPressedCallback"
import
import "import"
qualified_identifier
identifier "androidx"
. "."
identifier "lifecycle"
. "."
identifier "Observer"
import
import "import"
qualified_identifier
identifier "androidx"
. "."
identifier "lifecycle"
. "."
identifier "ViewModelProvider"
import
import "import"
qualified_identifier
identifier "com"
. "."
identifier "nextcloud"
. "."
identifier "client"
. "."
identifier "di"
. "."
identifier "Injectable"
import
import "import"
qualified_identifier
identifier "com"
. "."
identifier "nextcloud"
. "."
identifier "client"
. "."
identifier "di"
. "."
identifier "ViewModelFactory"
import
import "import"
qualified_identifier
identifier "com"
. "."
identifier "owncloud"
. "."
identifier "android"
. "."
identifier "R"
import
import "import"
qualified_identifier
identifier "com"
. "."
identifier "owncloud"
. "."
identifier "android"
. "."
identifier "ui"
. "."
identifier "activity"
. "."
identifier "ToolbarActivity"
import
import "import"
qualified_identifier
identifier "javax"
. "."
identifier "inject"
. "."
identifier "Inject"
class_declaration (+574 nodes collapsed)