Skip to content

Commit d8140ca

Browse files
committed
Add ViewCapability
Refactor ButtonCapability to ViewCapability for profile and dashboard Add ImageProcessorCapability Add greyscale feature module / service
1 parent 661a2ba commit d8140ca

File tree

30 files changed

+344
-154
lines changed

30 files changed

+344
-154
lines changed

app/build.gradle

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,9 @@ android {
2121
}
2222
}
2323

24-
dynamicFeatures = [":feature_profile", ":feature_dashboard"]
24+
dynamicFeatures = [":feature_profile", ":feature_dashboard", ":feature_greyscale_bitmap"]
25+
26+
2527
}
2628

2729
dependencies {

app/src/main/java/com/brainasaservice/service/FeatureRegistry.kt

Lines changed: 0 additions & 27 deletions
This file was deleted.
Lines changed: 30 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,50 +1,52 @@
11
package com.brainasaservice.service
22

33
import android.os.Bundle
4-
import android.util.Log
5-
import android.view.Menu
6-
import android.widget.Button
4+
import android.os.Handler
5+
import android.widget.ImageView
76
import androidx.appcompat.app.AppCompatActivity
8-
import androidx.core.view.MenuCompat
9-
import androidx.core.view.MenuItemCompat
10-
import com.brainasaservice.core.feature.capability.ButtonCapability
11-
import com.brainasaservice.core.feature.capability.MenuCapability
7+
import androidx.core.content.ContextCompat
8+
import androidx.core.graphics.drawable.toBitmap
9+
import com.brainasaservice.core.feature.capability.ImageProcessorCapability
10+
import com.brainasaservice.core.feature.capability.ViewCapability
11+
import com.brainasaservice.core.feature.getCapabilities
1212
import kotlinx.android.synthetic.main.activity_main.contentLayout
13-
import kotlinx.android.synthetic.main.activity_main.view.contentLayout
14-
import java.lang.IllegalStateException
1513

1614
class MainActivity : AppCompatActivity() {
1715

1816
override fun onCreate(savedInstanceState: Bundle?) {
1917
super.onCreate(savedInstanceState)
2018
setContentView(R.layout.activity_main)
2119

22-
val featureRegistry = FeatureRegistry.getInstance()
20+
val serviceRegistry = ServiceRegistry.getInstance()
2321

24-
Log.i("Mainn", "We found ${featureRegistry.getList().size} features.")
22+
val drawable = ContextCompat.getDrawable(this, R.drawable.bench)
23+
var bitmap = drawable?.toBitmap()
2524

26-
featureRegistry.getList().forEach { feature ->
27-
if (feature.capabilities.any { it is ButtonCapability }) {
28-
val buttonCapability = feature.capabilities.first { it is ButtonCapability } as ButtonCapability
29-
val button = Button(this).apply {
30-
text = buttonCapability.getText()
31-
setOnClickListener { buttonCapability.onClick(this@MainActivity) }
32-
}
33-
contentLayout.addView(button)
34-
}
25+
val imageView = ImageView(this).apply {
26+
setImageBitmap(bitmap)
3527
}
36-
}
3728

38-
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
39-
super.onCreateOptionsMenu(menu)
29+
var index = 1
4030

41-
FeatureRegistry.getInstance().getList().forEach { feature ->
42-
if(feature.capabilities.any { it is MenuCapability}) {
43-
val capability = feature.capabilities.first { it is MenuCapability } as MenuCapability
44-
menu?.add(capability.getTitle())?.let { capability.config(this@MainActivity, it) }
31+
serviceRegistry.getList().forEach { feature ->
32+
feature.getCapabilities<ViewCapability>().forEach { capability ->
33+
contentLayout.addView(capability.inflate(this, contentLayout), index++)
4534
}
4635
}
4736

48-
return true
37+
contentLayout.addView(imageView, index)
38+
39+
serviceRegistry.getList().filter { conf -> conf.capabilities.any { it is ImageProcessorCapability } }
40+
.forEach {
41+
it.getCapabilities<ImageProcessorCapability>().forEach { imageProcessorCapability ->
42+
bitmap?.let { bmp ->
43+
bitmap = imageProcessorCapability.process(bmp)
44+
}
45+
}
46+
}
47+
48+
Handler().postDelayed({
49+
imageView.setImageBitmap(bitmap)
50+
}, 3000)
4951
}
5052
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package com.brainasaservice.service
2+
3+
import android.util.Log
4+
import com.brainasaservice.core.feature.ServiceConfiguration
5+
6+
interface ServiceRegistry {
7+
fun register(service: ServiceConfiguration)
8+
9+
fun getList(): List<ServiceConfiguration>
10+
11+
companion object {
12+
private val _instance by lazy { ServiceRegistryImpl() }
13+
14+
fun getInstance(): ServiceRegistry = _instance
15+
}
16+
}
17+
18+
class ServiceRegistryImpl internal constructor() : ServiceRegistry {
19+
private val list: MutableList<ServiceConfiguration> = mutableListOf()
20+
21+
override fun getList(): List<ServiceConfiguration> = list
22+
23+
override fun register(service: ServiceConfiguration) {
24+
Log.i("ServiceRegistry", "register(service=$service)")
25+
list.add(service)
26+
}
27+
}
118 KB
Loading
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
<resources>
22
<string name="app_name">service based app</string>
3+
<string name="title_feature_greyscale_bitmap">Greyscale</string>
34
</resources>
Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1 @@
1-
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
2-
package="com.brainasaservice.core.feature" />
1+
<manifest package="com.brainasaservice.core.service" />

core-feature/src/main/java/com/brainasaservice/core/feature/FeatureConfiguration.kt

Lines changed: 0 additions & 16 deletions
This file was deleted.
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package com.brainasaservice.core.feature
2+
3+
import com.brainasaservice.core.feature.capability.ServiceCapability
4+
5+
interface ServiceConfiguration {
6+
val name: String
7+
8+
val capabilities: List<ServiceCapability>
9+
}
10+
11+
inline fun <reified T : ServiceCapability> ServiceConfiguration.getCapabilities(): List<T> {
12+
return capabilities.filter { it is T }.map { it as T }
13+
}

core-feature/src/main/java/com/brainasaservice/core/feature/capability/FeatureCapability.kt

Lines changed: 0 additions & 18 deletions
This file was deleted.

0 commit comments

Comments
 (0)