From 1d8d28dbce67dfb8b80c91f1f8048cd1ed779d99 Mon Sep 17 00:00:00 2001 From: Roberto Orgiu Date: Mon, 3 Apr 2017 11:34:44 +0200 Subject: [PATCH 1/9] Adds example for Adapter --- adapter/.gitignore | 1 + adapter/build.gradle | 31 +++++++++++++++++++ adapter/proguard-rules.pro | 25 +++++++++++++++ .../adapter/ExampleInstrumentedTest.java | 26 ++++++++++++++++ adapter/src/main/AndroidManifest.xml | 10 ++++++ .../java/it/ennova/adapter/LegacyData.java | 8 +++++ .../java/it/ennova/adapter/LegacySystem.java | 7 +++++ .../main/java/it/ennova/adapter/NewData.java | 7 +++++ .../it/ennova/adapter/NewToLegacyAdapter.java | 20 ++++++++++++ adapter/src/main/res/values/strings.xml | 3 ++ .../it/ennova/adapter/ExampleUnitTest.java | 17 ++++++++++ settings.gradle | 2 +- 12 files changed, 156 insertions(+), 1 deletion(-) create mode 100644 adapter/.gitignore create mode 100644 adapter/build.gradle create mode 100644 adapter/proguard-rules.pro create mode 100644 adapter/src/androidTest/java/it/ennova/adapter/ExampleInstrumentedTest.java create mode 100644 adapter/src/main/AndroidManifest.xml create mode 100644 adapter/src/main/java/it/ennova/adapter/LegacyData.java create mode 100644 adapter/src/main/java/it/ennova/adapter/LegacySystem.java create mode 100644 adapter/src/main/java/it/ennova/adapter/NewData.java create mode 100644 adapter/src/main/java/it/ennova/adapter/NewToLegacyAdapter.java create mode 100644 adapter/src/main/res/values/strings.xml create mode 100644 adapter/src/test/java/it/ennova/adapter/ExampleUnitTest.java diff --git a/adapter/.gitignore b/adapter/.gitignore new file mode 100644 index 0000000..796b96d --- /dev/null +++ b/adapter/.gitignore @@ -0,0 +1 @@ +/build diff --git a/adapter/build.gradle b/adapter/build.gradle new file mode 100644 index 0000000..5af30e6 --- /dev/null +++ b/adapter/build.gradle @@ -0,0 +1,31 @@ +apply plugin: 'com.android.library' + +android { + compileSdkVersion 25 + buildToolsVersion "25.0.2" + + defaultConfig { + minSdkVersion 24 + targetSdkVersion 25 + versionCode 1 + versionName "1.0" + + testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" + + } + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + } + } +} + +dependencies { + compile fileTree(dir: 'libs', include: ['*.jar']) + androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { + exclude group: 'com.android.support', module: 'support-annotations' + }) + compile 'com.android.support:appcompat-v7:25.3.1' + testCompile 'junit:junit:4.12' +} diff --git a/adapter/proguard-rules.pro b/adapter/proguard-rules.pro new file mode 100644 index 0000000..2f9a0d8 --- /dev/null +++ b/adapter/proguard-rules.pro @@ -0,0 +1,25 @@ +# Add project specific ProGuard rules here. +# By default, the flags in this file are appended to flags specified +# in /Users/tiwiz/Library/Android/sdk/tools/proguard/proguard-android.txt +# You can edit the include path and order by changing the proguardFiles +# directive in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# Add any project specific keep options here: + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile diff --git a/adapter/src/androidTest/java/it/ennova/adapter/ExampleInstrumentedTest.java b/adapter/src/androidTest/java/it/ennova/adapter/ExampleInstrumentedTest.java new file mode 100644 index 0000000..24d2613 --- /dev/null +++ b/adapter/src/androidTest/java/it/ennova/adapter/ExampleInstrumentedTest.java @@ -0,0 +1,26 @@ +package it.ennova.adapter; + +import android.content.Context; +import android.support.test.InstrumentationRegistry; +import android.support.test.runner.AndroidJUnit4; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import static org.junit.Assert.*; + +/** + * Instrumentation test, which will execute on an Android device. + * + * @see Testing documentation + */ +@RunWith(AndroidJUnit4.class) +public class ExampleInstrumentedTest { + @Test + public void useAppContext() throws Exception { + // Context of the app under test. + Context appContext = InstrumentationRegistry.getTargetContext(); + + assertEquals("it.ennova.adapter.test", appContext.getPackageName()); + } +} diff --git a/adapter/src/main/AndroidManifest.xml b/adapter/src/main/AndroidManifest.xml new file mode 100644 index 0000000..acbc2ca --- /dev/null +++ b/adapter/src/main/AndroidManifest.xml @@ -0,0 +1,10 @@ + + + + + + + diff --git a/adapter/src/main/java/it/ennova/adapter/LegacyData.java b/adapter/src/main/java/it/ennova/adapter/LegacyData.java new file mode 100644 index 0000000..db3f909 --- /dev/null +++ b/adapter/src/main/java/it/ennova/adapter/LegacyData.java @@ -0,0 +1,8 @@ +package it.ennova.adapter; + +public interface LegacyData { + + long getByteCount(); + + String getDataAsString(); +} diff --git a/adapter/src/main/java/it/ennova/adapter/LegacySystem.java b/adapter/src/main/java/it/ennova/adapter/LegacySystem.java new file mode 100644 index 0000000..6373454 --- /dev/null +++ b/adapter/src/main/java/it/ennova/adapter/LegacySystem.java @@ -0,0 +1,7 @@ +package it.ennova.adapter; + + +public interface LegacySystem { + + void accept(LegacyData legacyData); +} diff --git a/adapter/src/main/java/it/ennova/adapter/NewData.java b/adapter/src/main/java/it/ennova/adapter/NewData.java new file mode 100644 index 0000000..876d416 --- /dev/null +++ b/adapter/src/main/java/it/ennova/adapter/NewData.java @@ -0,0 +1,7 @@ +package it.ennova.adapter; + +public interface NewData { + + String dataRepresentation(); + +} diff --git a/adapter/src/main/java/it/ennova/adapter/NewToLegacyAdapter.java b/adapter/src/main/java/it/ennova/adapter/NewToLegacyAdapter.java new file mode 100644 index 0000000..9ba7b3d --- /dev/null +++ b/adapter/src/main/java/it/ennova/adapter/NewToLegacyAdapter.java @@ -0,0 +1,20 @@ +package it.ennova.adapter; + + +public class NewToLegacyAdapter implements LegacyData{ + private final NewData wrapped; + + public NewToLegacyAdapter(NewData wrapped) { + this.wrapped = wrapped; + } + + @Override + public long getByteCount() { + return wrapped.dataRepresentation().getBytes().length; + } + + @Override + public String getDataAsString() { + return wrapped.dataRepresentation(); + } +} diff --git a/adapter/src/main/res/values/strings.xml b/adapter/src/main/res/values/strings.xml new file mode 100644 index 0000000..6c0502c --- /dev/null +++ b/adapter/src/main/res/values/strings.xml @@ -0,0 +1,3 @@ + + adapter + diff --git a/adapter/src/test/java/it/ennova/adapter/ExampleUnitTest.java b/adapter/src/test/java/it/ennova/adapter/ExampleUnitTest.java new file mode 100644 index 0000000..c7d8090 --- /dev/null +++ b/adapter/src/test/java/it/ennova/adapter/ExampleUnitTest.java @@ -0,0 +1,17 @@ +package it.ennova.adapter; + +import org.junit.Test; + +import static org.junit.Assert.*; + +/** + * Example local unit test, which will execute on the development machine (host). + * + * @see Testing documentation + */ +public class ExampleUnitTest { + @Test + public void addition_isCorrect() throws Exception { + assertEquals(4, 2 + 2); + } +} diff --git a/settings.gradle b/settings.gradle index c127e32..e6ded33 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1 +1 @@ -include ':app', ':observer', ':chain-of-responsibility', ':builder', ':decorator' +include ':app', ':observer', ':chain-of-responsibility', ':builder', ':decorator', ':adapter' From 183570d67ee8750c53315a1e600e6cd05ab974db Mon Sep 17 00:00:00 2001 From: Roberto Orgiu Date: Fri, 12 May 2017 15:50:30 +0200 Subject: [PATCH 2/9] Add Adapter pattern --- app/src/main/AndroidManifest.xml | 9 +++++ .../adapter/AdapterActivity.java | 32 ++++++++++++++++++ .../chain/ActivityChainManager.java | 3 ++ app/src/main/res/layout/activity_adapter.xml | 33 +++++++++++++++++++ app/src/main/res/layout/content_adapter.xml | 12 +++++++ app/src/main/res/values/patterns.xml | 2 ++ app/src/main/res/values/strings.xml | 1 + 7 files changed, 92 insertions(+) create mode 100644 app/src/main/java/io/caster/designpatterns/adapter/AdapterActivity.java create mode 100644 app/src/main/res/layout/activity_adapter.xml create mode 100644 app/src/main/res/layout/content_adapter.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index f6cacfd..cc4ca8e 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -41,6 +41,15 @@ android:name="android.support.PARENT_ACTIVITY" android:value="io.caster.designpatterns.MainActivity" /> + + + diff --git a/app/src/main/java/io/caster/designpatterns/adapter/AdapterActivity.java b/app/src/main/java/io/caster/designpatterns/adapter/AdapterActivity.java new file mode 100644 index 0000000..f8e73c6 --- /dev/null +++ b/app/src/main/java/io/caster/designpatterns/adapter/AdapterActivity.java @@ -0,0 +1,32 @@ +package io.caster.designpatterns.adapter; + +import android.os.Bundle; +import android.support.design.widget.FloatingActionButton; +import android.support.design.widget.Snackbar; +import android.support.v7.app.AppCompatActivity; +import android.support.v7.widget.Toolbar; +import android.view.View; + +import io.caster.designpatterns.R; + +public class AdapterActivity extends AppCompatActivity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_adapter); + Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); + setSupportActionBar(toolbar); + + FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); + fab.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) + .setAction("Action", null).show(); + } + }); + getSupportActionBar().setDisplayHomeAsUpEnabled(true); + } + +} diff --git a/app/src/main/java/io/caster/designpatterns/chain/ActivityChainManager.java b/app/src/main/java/io/caster/designpatterns/chain/ActivityChainManager.java index 3460c1a..0f06768 100644 --- a/app/src/main/java/io/caster/designpatterns/chain/ActivityChainManager.java +++ b/app/src/main/java/io/caster/designpatterns/chain/ActivityChainManager.java @@ -5,6 +5,7 @@ import android.support.annotation.NonNull; import android.support.v7.app.AppCompatActivity; +import io.caster.designpatterns.adapter.AdapterActivity; import io.caster.designpatterns.builder.BuilderActivity; import io.caster.designpatterns.decorator.DecoratorActivity; import io.caster.designpatterns.observer.ObserverActivity; @@ -17,10 +18,12 @@ public ActivityChainManager(@NonNull AppCompatActivity host) { ActivityChainElement chainOfResponsibility = new ActivityChainElement(1, new Intent(host, ChainOfResponsibilityActivity.class), host); ActivityChainElement builder = new ActivityChainElement(2, new Intent(host, BuilderActivity.class), host); ActivityChainElement decorator = new ActivityChainElement(3, new Intent(host, DecoratorActivity.class), host); + ActivityChainElement adapter = new ActivityChainElement(4, new Intent(host, AdapterActivity.class), host); head.setNext(chainOfResponsibility); chainOfResponsibility.setNext(builder); builder.setNext(decorator); + decorator.setNext(adapter); } public void onPatternReceived(int patternId) { diff --git a/app/src/main/res/layout/activity_adapter.xml b/app/src/main/res/layout/activity_adapter.xml new file mode 100644 index 0000000..5495909 --- /dev/null +++ b/app/src/main/res/layout/activity_adapter.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/content_adapter.xml b/app/src/main/res/layout/content_adapter.xml new file mode 100644 index 0000000..ae7e749 --- /dev/null +++ b/app/src/main/res/layout/content_adapter.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/values/patterns.xml b/app/src/main/res/values/patterns.xml index 4b66dda..7a1e64f 100644 --- a/app/src/main/res/values/patterns.xml +++ b/app/src/main/res/values/patterns.xml @@ -4,11 +4,13 @@ Chain of Responsibility Builder Decorator + Adapter @string/observer_pattern @string/chain_of_responsibility @string/builder @string/decorator + @string/adapter diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index e0d0b21..25010fc 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -10,4 +10,5 @@ Negative Neutral Cancelable + AdapterActivity From 62ae78780ebb535ce5abb06a0147ce58ad1cc02d Mon Sep 17 00:00:00 2001 From: Roberto Orgiu Date: Mon, 15 Jan 2018 08:22:18 +0100 Subject: [PATCH 3/9] Update the project --- adapter/build.gradle | 10 +++++----- .../java/io/caster/designpatterns/main/MainView.java | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/adapter/build.gradle b/adapter/build.gradle index 5af30e6..74091cf 100644 --- a/adapter/build.gradle +++ b/adapter/build.gradle @@ -1,12 +1,12 @@ apply plugin: 'com.android.library' android { - compileSdkVersion 25 - buildToolsVersion "25.0.2" + compileSdkVersion 26 + buildToolsVersion '26.0.2' defaultConfig { - minSdkVersion 24 - targetSdkVersion 25 + minSdkVersion 16 + targetSdkVersion 26 versionCode 1 versionName "1.0" @@ -26,6 +26,6 @@ dependencies { androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' }) - compile 'com.android.support:appcompat-v7:25.3.1' + compile 'com.android.support:appcompat-v7:26.1.0' testCompile 'junit:junit:4.12' } diff --git a/app/src/main/java/io/caster/designpatterns/main/MainView.java b/app/src/main/java/io/caster/designpatterns/main/MainView.java index d823afc..dea44e9 100644 --- a/app/src/main/java/io/caster/designpatterns/main/MainView.java +++ b/app/src/main/java/io/caster/designpatterns/main/MainView.java @@ -35,7 +35,7 @@ public static MainView with(@NonNull final Activity target) { private MainView(@NonNull final Activity target) { patterns = target.getResources().getStringArray(R.array.implemented_patterns); listener = bindListenerFrom(target); - patternsList = (ListView) target.findViewById(R.id.patternList); + patternsList = target.findViewById(R.id.patternList); } private OnPatternSelectedListener bindListenerFrom(Context context) { From 042db817a0b477530ea9182cbe8703c2d8f76d2f Mon Sep 17 00:00:00 2001 From: Roberto Orgiu Date: Mon, 15 Jan 2018 08:29:48 +0100 Subject: [PATCH 4/9] Add data source for the adapter --- app/build.gradle | 2 +- .../adapter/AdapterActivity.java | 14 +------------- .../designpatterns/adapter/DataSource.java | 18 ++++++++++++++++++ app/src/main/res/layout/activity_adapter.xml | 8 -------- app/src/main/res/layout/content_adapter.xml | 4 ++-- 5 files changed, 22 insertions(+), 24 deletions(-) create mode 100644 app/src/main/java/io/caster/designpatterns/adapter/DataSource.java diff --git a/app/build.gradle b/app/build.gradle index 2f623eb..d732491 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -31,7 +31,7 @@ dependencies { compile project(':decorator') compile 'com.android.support:appcompat-v7:26.1.0' compile 'com.android.support:recyclerview-v7:26.1.0' - compile 'com.android.support.constraint:constraint-layout:1.1.0-beta2' + compile 'com.android.support.constraint:constraint-layout:1.1.0-beta4' compile 'com.android.support:design:26.1.0' testCompile 'junit:junit:4.12' } diff --git a/app/src/main/java/io/caster/designpatterns/adapter/AdapterActivity.java b/app/src/main/java/io/caster/designpatterns/adapter/AdapterActivity.java index f8e73c6..b47d7bc 100644 --- a/app/src/main/java/io/caster/designpatterns/adapter/AdapterActivity.java +++ b/app/src/main/java/io/caster/designpatterns/adapter/AdapterActivity.java @@ -1,11 +1,8 @@ package io.caster.designpatterns.adapter; import android.os.Bundle; -import android.support.design.widget.FloatingActionButton; -import android.support.design.widget.Snackbar; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; -import android.view.View; import io.caster.designpatterns.R; @@ -15,17 +12,8 @@ public class AdapterActivity extends AppCompatActivity { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_adapter); - Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); + Toolbar toolbar = findViewById(R.id.toolbar); setSupportActionBar(toolbar); - - FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); - fab.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) - .setAction("Action", null).show(); - } - }); getSupportActionBar().setDisplayHomeAsUpEnabled(true); } diff --git a/app/src/main/java/io/caster/designpatterns/adapter/DataSource.java b/app/src/main/java/io/caster/designpatterns/adapter/DataSource.java new file mode 100644 index 0000000..eed85a6 --- /dev/null +++ b/app/src/main/java/io/caster/designpatterns/adapter/DataSource.java @@ -0,0 +1,18 @@ +package io.caster.designpatterns.adapter; + + +import android.content.Context; +import io.caster.designpatterns.R; + +public class DataSource { + + private final String[] patterns; + + public DataSource(Context context) { + patterns = context.getResources().getStringArray(R.array.implemented_patterns); + } + + public String[] getPatterns() { + return patterns; + } +} diff --git a/app/src/main/res/layout/activity_adapter.xml b/app/src/main/res/layout/activity_adapter.xml index 5495909..290358d 100644 --- a/app/src/main/res/layout/activity_adapter.xml +++ b/app/src/main/res/layout/activity_adapter.xml @@ -22,12 +22,4 @@ - - diff --git a/app/src/main/res/layout/content_adapter.xml b/app/src/main/res/layout/content_adapter.xml index ae7e749..689763f 100644 --- a/app/src/main/res/layout/content_adapter.xml +++ b/app/src/main/res/layout/content_adapter.xml @@ -1,5 +1,5 @@ - - + From 2517f5b387b7730a31d70b9fb361eee3d81c2411 Mon Sep 17 00:00:00 2001 From: Roberto Orgiu Date: Mon, 15 Jan 2018 08:35:04 +0100 Subject: [PATCH 5/9] Add layout for the adapter Activity --- app/src/main/res/layout/content_adapter.xml | 27 +++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/app/src/main/res/layout/content_adapter.xml b/app/src/main/res/layout/content_adapter.xml index 689763f..d1228fa 100644 --- a/app/src/main/res/layout/content_adapter.xml +++ b/app/src/main/res/layout/content_adapter.xml @@ -9,4 +9,31 @@ tools:context="io.caster.designpatterns.adapter.AdapterActivity" tools:showIn="@layout/activity_adapter"> + +