Category: Architecture & Developing

Wrap Class – Refactor Legacy Pattern

Wrap Class

When using a wrap method, we want to add a new behavior that can be added around the method, such as before or after the existing code.
However, there are times when we need to add behavior in more than one method, like logging before or after some, or all public methods.

Description and how to apply

There are at least 2 ways of doing it:

1. Using the Decorator Pattern

When using the **Decorator Pattern**, we want to make sure both classes implement the same interface or inherit from the same base class, because we want the subclass to have the same “public” interface. This is because a Decorator class can be used interchangeably between the other Decorators. For instance, having a logging decorator or a performance decorator should be as easy as just pass one instance or the other in a class constructor, and its use should be transparent.

2. Aggregating the current class

If you think you want to be more specific about the class being refactored,
then a Wrap Class just wrapping the existing one should be enough. In this case, you don’t need to *extract interface* since the class is passed in the constructor parameters and used in the method. In this approach, you can do a “method rename”, for instance, if the original method was called *process*, the new exposed method could be *processWithLogging*. Another advantage is that in the constructor, you can pass other information useful for the new behavior, something that in the Decorator Pattern can “violate” the Decorator Pattern principle.

Which one?

From the examples below you can observe the Aggregating solution is more specific than the Decorator. Both will work, but if you need help choosing, choose the Decorator if you think that other changes will happen in the future that can be added creating more Decorators, and/or the updates are just adding new behavior, and probably you expect changes in multiple methods, like logging every public method. Use the Aggregating solution if the change is very specific, just in a few places and you don’t expect great changes in the future for these methods.

Examples

Imagine the following business existing code:

Using the Decorator Pattern

You just have to replace the calls to CustomerPaymentProcessor with the Decorator, sice both implement the same interface.

Probably when refactoring you will need to *Extract Interface* or create an *Abstract Class* to implement this pattern.

Using a Wrapper Class

Here, the solution is specific to the code refactoring being done, it cannot be reused.

Android Adventures – Development Tips – Part 5

How to add the back button on the Activity Action Bar

If the character space stops working with EditBox when using Listeners
Probably it is the google keyboard trying to impose words instead of characters
The one solution that worked for me was to disable the text suggestions

Android Adventures–Development Tips-Parte 3

How to shrink activity layout when virtual keyboard is displayed and hides some of the views?
There are several different solutions, one of them is:

– In the AndroidManifest.xml, for the target activity

android:windowSoftInputMode=”adjustResize”

If you use Database Room framework for SQLite management and Kotlin:

If you are using Kotlin don’t create a new method, you can have compilation errors on the generated class

java.lang.IllegalStateException: Cannot access database on the main thread since it may potentially lock the UI for a long period of time.
Solution 1: add allowMainThreadQueries

MyApp.database =  Room.databaseBuilder(this, AppDatabase::class.java, “MyDatabase”).allowMainThreadQueries().build()

Solution 2: Use another thread

Solution 3: If you use Kotlin 1.3+ you can use coroutines

How to explore a database in Android Emulator?
– You can copy the db files from the device to your computer and use a sqlite browser

– I use: Android Debug Database: https://github.com/amitshekhariitbhu/Android-Debug-Database

Android Adventures – Development Tips – Parte 2

How to add an icon to a button?
android:drawableLeft=”@android:drawable/ic_menu_search”
How to push a button in a LinearLayout to the right?
The trick in is the empty view

 

How to have an ImageButton transparent?
android:background=”@null”
How to clear all the Spannable styles in an EditText?
val currentPositionsInputText = contentTextEditBox.selectionStart
contentTextEditBox.setText(contentTextEditBox.text.toString())

Android Adventures – Development Tips

How to prevent an EditBox from expanding?

android:layout_width="0dp" – or height, depending the need and the use of the weight

android:layout_weight="1" – if you just have one and you want to fill the whole layout

How to add a Scrollbar to an EditBox?
android:scrollbars=”vertical”
How to write the text on top left of the EditBox?
android:gravity=”top|left”
How to avoid the overlap of the Toolbar with the included layout?
How to Highlight blocks of text in an EditBox?
Spannable spannable=new SpannableString(string);
// You can add other styles here, like bold, underline, other// if you are using a loop, put the Spannable construction outside the loop or sometimes only the last one will be used

spannable.setSpan(new ForegroundColorSpan(Color.BLUE), start, end, 0);
editText.setText(spannable);

Android App – Just Send It 1.0

Screenshot_1545526727

I just developed an Android application to improve your productivity.
Just Send It, an Android application to send a note with the fewer clicks possible.

An application developed to just Write and Send to your preferred email account.

Enjoy it!

Give Me Numbers 1.1

icon_512x512_efeitoBuraco

I released an update to my first Android application developed Give Me Numbers.

User Interface Improved, more colorful
You can choose a separator for the numbers generated

 

Screenshot_1545439156

InHash – Visual Studio Code Extension to Compute Hashs and Checksum

InHash – Visual Studio Code Extension to compute hash and checksum

I just developed the visual studio code version of the InHash plugin already developed for IntelliJ and Eclipse.

This plugin computes hash and checksum for files and selected text.

It started to be a necessity for a project where I was involved and “why not to create a plugin from it?”

Find it here: Visual Studio Code Extension to compute Hashs and Checksum

Embedding Kotlin Playground

Jetbrains is providing plugins and tools to embed Kotlin in any website
– you can update and run the code clicking the play!

Just try it!

Error: java.lang.NoClassDefFoundError: com/fasterxml/jackson/annotation/JsonInclude$Value

java.lang.NoClassDefFoundError: com/fasterxml/jackson/annotation/JsonInclude$Value

If this error occurs try addind the following dependencies to your pom.xml
Usually jackson needs these 3 dependencies:

  • databind
  • core
  • annotations

    com.fasterxml.jackson.core
    jackson-databind
    2.9.0

		

    com.fasterxml.jackson.core
    jackson-core
    2.9.0



    com.fasterxml.jackson.core
    jackson-annotations
    2.9.0

Bad Behavior has blocked 167 access attempts in the last 7 days.

Hyper Smash