diff --git a/app/build.gradle b/app/build.gradle index 74fabf9..e7d0c07 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -59,7 +59,7 @@ // } defaultConfig { - applicationId "nl.digital_me.dummyandroidapp" + applicationId "net.dolden.dummyand" minSdkVersion build_versions.min_sdk targetSdkVersion build_versions.target_sdk versionCode project.hasProperty('versionCode') ? project.property('versionCode') as int : 80 diff --git a/app/src/acceptance/google-services.json b/app/src/acceptance/google-services.json index 53482e4..0990c52 100644 --- a/app/src/acceptance/google-services.json +++ b/app/src/acceptance/google-services.json @@ -8,38 +8,9 @@ "client": [ { "client_info": { - "mobilesdk_app_id": "1:73241222539:android:b54cdbef562781b312e38e", + "mobilesdk_app_id": "1:73241222539:android:4a4213bfca15d7f112e38e", "android_client_info": { - "package_name": "nl.digital_me.dummyandroidapp.acc" - } - }, - "oauth_client": [ - { - "client_id": "73241222539-cndrmso63ealc3k6ateaip0h94h85l8g.apps.googleusercontent.com", - "client_type": 3 - } - ], - "api_key": [ - { - "current_key": "AIzaSyC3moppmy85R7j5ADC4yZazE9FA32mb5J8" - } - ], - "services": { - "appinvite_service": { - "other_platform_oauth_client": [ - { - "client_id": "73241222539-cndrmso63ealc3k6ateaip0h94h85l8g.apps.googleusercontent.com", - "client_type": 3 - } - ] - } - } - }, - { - "client_info": { - "mobilesdk_app_id": "1:73241222539:android:2755489b34d07e8912e38e", - "android_client_info": { - "package_name": "nl.digital_me.dummyandroidapp.dev2" + "package_name": "net.dolden.dummyand.acc" } }, "oauth_client": [ @@ -66,4 +37,4 @@ } ], "configuration_version": "1" -} \ No newline at end of file +} diff --git a/app/src/androidTest/java/net/dolden/dummyand/ApplicationTest.java b/app/src/androidTest/java/net/dolden/dummyand/ApplicationTest.java new file mode 100644 index 0000000..bed573c --- /dev/null +++ b/app/src/androidTest/java/net/dolden/dummyand/ApplicationTest.java @@ -0,0 +1,13 @@ +package app.src.androidTest.java.net.dolden.dummyand; + +import android.app.Application; +import android.test.ApplicationTestCase; + +/** + * Testing Fundamentals + */ +public class ApplicationTest extends ApplicationTestCase { + public ApplicationTest() { + super(Application.class); + } +} \ No newline at end of file diff --git a/app/src/androidTest/java/nl/digital_me/dummyandroidapp/ApplicationTest.java b/app/src/androidTest/java/nl/digital_me/dummyandroidapp/ApplicationTest.java deleted file mode 100644 index d434c9d..0000000 --- a/app/src/androidTest/java/nl/digital_me/dummyandroidapp/ApplicationTest.java +++ /dev/null @@ -1,13 +0,0 @@ -package nl.digital_me.dummyandroidapp; - -import android.app.Application; -import android.test.ApplicationTestCase; - -/** - * Testing Fundamentals - */ -public class ApplicationTest extends ApplicationTestCase { - public ApplicationTest() { - super(Application.class); - } -} \ No newline at end of file diff --git a/app/src/dev2/google-services.json b/app/src/dev2/google-services.json index 410ab1d..a26fd55 100644 --- a/app/src/dev2/google-services.json +++ b/app/src/dev2/google-services.json @@ -8,9 +8,9 @@ "client": [ { "client_info": { - "mobilesdk_app_id": "1:73241222539:android:2755489b34d07e8912e38e", + "mobilesdk_app_id": "1:73241222539:android:b0ef4c6b715ce19612e38e", "android_client_info": { - "package_name": "nl.digital_me.dummyandroidapp.dev2" + "package_name": "net.dolden.dummyand.dev2" } }, "oauth_client": [ diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c383bb9..da97a55 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,6 +1,6 @@ + package="net.dolden.dummyand" > + android:value="net.dolden.dummyand.BrowseCard" /> diff --git a/app/src/main/gen/net/dolden/dummyand/BuildConfig.java b/app/src/main/gen/net/dolden/dummyand/BuildConfig.java new file mode 100644 index 0000000..cc5661a --- /dev/null +++ b/app/src/main/gen/net/dolden/dummyand/BuildConfig.java @@ -0,0 +1,6 @@ +/** Automatically generated file. DO NOT MODIFY */ +package app.src.main.gen.net.dolden.dummyand; + +public final class BuildConfig { + public final static boolean DEBUG = true; +} \ No newline at end of file diff --git a/app/src/main/gen/nl/digital_me/dummyandroidapp/BuildConfig.java b/app/src/main/gen/nl/digital_me/dummyandroidapp/BuildConfig.java deleted file mode 100644 index a519ffd..0000000 --- a/app/src/main/gen/nl/digital_me/dummyandroidapp/BuildConfig.java +++ /dev/null @@ -1,6 +0,0 @@ -/** Automatically generated file. DO NOT MODIFY */ -package nl.digital_me.dummyandroidapp; - -public final class BuildConfig { - public final static boolean DEBUG = true; -} \ No newline at end of file diff --git a/app/src/main/java/net/dolden/dummyand/BrowseCard.java b/app/src/main/java/net/dolden/dummyand/BrowseCard.java new file mode 100644 index 0000000..7531ddc --- /dev/null +++ b/app/src/main/java/net/dolden/dummyand/BrowseCard.java @@ -0,0 +1,190 @@ +package app.src.main.java.net.dolden.dummyand; + +import android.content.Intent; +import android.content.pm.PackageInfo; +import android.os.Bundle; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.Menu; +import android.view.MenuItem; +import android.view.View; +import android.view.ViewGroup; +import android.widget.EditText; +import android.widget.TextView; + +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.Toolbar; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentPagerAdapter; +import androidx.viewpager.widget.ViewPager; + +public class BrowseCard extends AppCompatActivity { + + /** + * The {@link androidx.core.view.PagerAdapter} that will provide + * fragments for each of the sections. We use a + * {@link FragmentPagerAdapter} derivative, which will keep every + * loaded fragment in memory. If this becomes too memory intensive, it + * may be best to switch to a + * {@link androidx.core.app.FragmentStatePagerAdapter}. + */ + private SectionsPagerAdapter mSectionsPagerAdapter; + + /** + * The {@link ViewPager} that will host the section contents. + */ + private ViewPager mViewPager; + + public final static String EXTRA_MESSAGE = "net.dolden.dummyand.MESSAGE"; + + private final static String TAG = BrowseCard.class.getName(); + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_browse_card); + + Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); + setSupportActionBar(toolbar); + // Create the adapter that will return a fragment for each of the three + // primary sections of the activity. + mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager()); + + // Set up the ViewPager with the sections adapter. + mViewPager = (ViewPager) findViewById(R.id.container); + mViewPager.setAdapter(mSectionsPagerAdapter); + +// 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(); +// } +// }); + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + // Inflate the menu; this adds items to the action bar if it is present. + getMenuInflater().inflate(R.menu.menu_browse_card, menu); + return true; + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + // Handle action bar item clicks here. The action bar will + // automatically handle clicks on the Home/Up button, so long + // as you specify a parent activity in AndroidManifest.xml. + int id = item.getItemId(); + + //noinspection SimplifiableIfStatement + if (id == R.id.action_settings) { + return true; + } + + return super.onOptionsItemSelected(item); + } + + + /** + * A {@link FragmentPagerAdapter} that returns a fragment corresponding to + * one of the sections/tabs/pages. + */ + public class SectionsPagerAdapter extends FragmentPagerAdapter { + + public SectionsPagerAdapter(FragmentManager fm) { + super(fm); + } + + @Override + public Fragment getItem(int position) { + // getItem is called to instantiate the fragment for the given page. + // Return a PlaceholderFragment (defined as a static inner class below). + return PlaceholderFragment.newInstance(position + 1); + } + + @Override + public int getCount() { + // Show 3 total pages. + return 3; + } + + @Override + public CharSequence getPageTitle(int position) { + switch (position) { + case 0: + return "SECTION 1"; + case 1: + return "SECTION 2"; + case 2: + return "SECTION 3"; + } + return null; + } + } + + /** + * A placeholder fragment containing a simple view. + */ + public static class PlaceholderFragment extends Fragment { + /** + * The fragment argument representing the section number for this + * fragment. + */ + private static final String ARG_SECTION_NUMBER = "section_number"; + + /** + * Returns a new instance of this fragment for the given section + * number. + */ + public static PlaceholderFragment newInstance(int sectionNumber) { + PlaceholderFragment fragment = new PlaceholderFragment(); + Bundle args = new Bundle(); + args.putInt(ARG_SECTION_NUMBER, sectionNumber); + fragment.setArguments(args); + return fragment; + } + + public PlaceholderFragment() { + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + View rootView = null; + try { + PackageInfo pInfo = this.getContext().getPackageManager().getPackageInfo(this.getContext().getPackageName(), 0); + String sVersion = pInfo.versionName + "-" + Integer.toString(pInfo.versionCode); + rootView = inflater.inflate(R.layout.fragment_browse_card, container, false); + TextView textView = (TextView) rootView.findViewById(R.id.section_label); + textView.setText(getString(R.string.section_format, getArguments().getInt(ARG_SECTION_NUMBER))); + + EditText editText = (EditText) rootView.findViewById(R.id.edit_message); + String message = editText.getText().toString(); + message = message + "Version = " + sVersion; + + editText.setText(message); + + } catch (Exception e) { + Log.e(TAG, e.toString()); + } + return rootView; + } + } + + /** + * Called when the user clicks the Send/eMail button + */ + public void sendMessage(View view) { + // Do something in response to button + Intent intent = new Intent(this, DisplayMessageActivity.class); + //EditText editText = (EditText) view.findViewById(R.id.edit_message); + //EditText editText = (EditText) mViewPager.getCurrentItem() ).findViewById(R.id.edit_message); + //String message = editText.getText().toString(); + String message = "Item number = "; + intent.putExtra(EXTRA_MESSAGE, message); + startActivity(intent); + } +} diff --git a/app/src/main/java/net/dolden/dummyand/DisplayMessageActivity.java b/app/src/main/java/net/dolden/dummyand/DisplayMessageActivity.java new file mode 100644 index 0000000..6c761c3 --- /dev/null +++ b/app/src/main/java/net/dolden/dummyand/DisplayMessageActivity.java @@ -0,0 +1,27 @@ +package app.src.main.java.net.dolden.dummyand; + +import android.content.Intent; +import android.os.Bundle; +import android.widget.TextView; + +import androidx.appcompat.app.AppCompatActivity; + +public class DisplayMessageActivity extends AppCompatActivity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + // Get the message from the intent + Intent intent = getIntent(); + String message = intent.getStringExtra(BrowseCard.EXTRA_MESSAGE); + + // Create the text view + TextView textView = new TextView(this); + textView.setTextSize(40); + textView.setText(message); + + // Set the text view as the activity layout + setContentView(textView); + } +} diff --git a/app/src/main/java/nl/digital_me/dummyandroidapp/BrowseCard.java b/app/src/main/java/nl/digital_me/dummyandroidapp/BrowseCard.java deleted file mode 100644 index cdc92d8..0000000 --- a/app/src/main/java/nl/digital_me/dummyandroidapp/BrowseCard.java +++ /dev/null @@ -1,190 +0,0 @@ -package nl.digital_me.dummyandroidapp; - -import android.content.Intent; -import android.content.pm.PackageInfo; -import android.os.Bundle; -import android.util.Log; -import android.view.LayoutInflater; -import android.view.Menu; -import android.view.MenuItem; -import android.view.View; -import android.view.ViewGroup; -import android.widget.EditText; -import android.widget.TextView; - -import androidx.appcompat.app.AppCompatActivity; -import androidx.appcompat.widget.Toolbar; -import androidx.fragment.app.Fragment; -import androidx.fragment.app.FragmentManager; -import androidx.fragment.app.FragmentPagerAdapter; -import androidx.viewpager.widget.ViewPager; - -public class BrowseCard extends AppCompatActivity { - - /** - * The {@link androidx.core.view.PagerAdapter} that will provide - * fragments for each of the sections. We use a - * {@link FragmentPagerAdapter} derivative, which will keep every - * loaded fragment in memory. If this becomes too memory intensive, it - * may be best to switch to a - * {@link androidx.core.app.FragmentStatePagerAdapter}. - */ - private SectionsPagerAdapter mSectionsPagerAdapter; - - /** - * The {@link ViewPager} that will host the section contents. - */ - private ViewPager mViewPager; - - public final static String EXTRA_MESSAGE = "nl.digital_me.dummyandroidapp.MESSAGE"; - - private final static String TAG = BrowseCard.class.getName(); - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_browse_card); - - Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); - setSupportActionBar(toolbar); - // Create the adapter that will return a fragment for each of the three - // primary sections of the activity. - mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager()); - - // Set up the ViewPager with the sections adapter. - mViewPager = (ViewPager) findViewById(R.id.container); - mViewPager.setAdapter(mSectionsPagerAdapter); - -// 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(); -// } -// }); - } - - @Override - public boolean onCreateOptionsMenu(Menu menu) { - // Inflate the menu; this adds items to the action bar if it is present. - getMenuInflater().inflate(R.menu.menu_browse_card, menu); - return true; - } - - @Override - public boolean onOptionsItemSelected(MenuItem item) { - // Handle action bar item clicks here. The action bar will - // automatically handle clicks on the Home/Up button, so long - // as you specify a parent activity in AndroidManifest.xml. - int id = item.getItemId(); - - //noinspection SimplifiableIfStatement - if (id == R.id.action_settings) { - return true; - } - - return super.onOptionsItemSelected(item); - } - - - /** - * A {@link FragmentPagerAdapter} that returns a fragment corresponding to - * one of the sections/tabs/pages. - */ - public class SectionsPagerAdapter extends FragmentPagerAdapter { - - public SectionsPagerAdapter(FragmentManager fm) { - super(fm); - } - - @Override - public Fragment getItem(int position) { - // getItem is called to instantiate the fragment for the given page. - // Return a PlaceholderFragment (defined as a static inner class below). - return PlaceholderFragment.newInstance(position + 1); - } - - @Override - public int getCount() { - // Show 3 total pages. - return 3; - } - - @Override - public CharSequence getPageTitle(int position) { - switch (position) { - case 0: - return "SECTION 1"; - case 1: - return "SECTION 2"; - case 2: - return "SECTION 3"; - } - return null; - } - } - - /** - * A placeholder fragment containing a simple view. - */ - public static class PlaceholderFragment extends Fragment { - /** - * The fragment argument representing the section number for this - * fragment. - */ - private static final String ARG_SECTION_NUMBER = "section_number"; - - /** - * Returns a new instance of this fragment for the given section - * number. - */ - public static PlaceholderFragment newInstance(int sectionNumber) { - PlaceholderFragment fragment = new PlaceholderFragment(); - Bundle args = new Bundle(); - args.putInt(ARG_SECTION_NUMBER, sectionNumber); - fragment.setArguments(args); - return fragment; - } - - public PlaceholderFragment() { - } - - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { - View rootView = null; - try { - PackageInfo pInfo = this.getContext().getPackageManager().getPackageInfo(this.getContext().getPackageName(), 0); - String sVersion = pInfo.versionName + "-" + Integer.toString(pInfo.versionCode); - rootView = inflater.inflate(R.layout.fragment_browse_card, container, false); - TextView textView = (TextView) rootView.findViewById(R.id.section_label); - textView.setText(getString(R.string.section_format, getArguments().getInt(ARG_SECTION_NUMBER))); - - EditText editText = (EditText) rootView.findViewById(R.id.edit_message); - String message = editText.getText().toString(); - message = message + "Version = " + sVersion; - - editText.setText(message); - - } catch (Exception e) { - Log.e(TAG, e.toString()); - } - return rootView; - } - } - - /** - * Called when the user clicks the Send/eMail button - */ - public void sendMessage(View view) { - // Do something in response to button - Intent intent = new Intent(this, DisplayMessageActivity.class); - //EditText editText = (EditText) view.findViewById(R.id.edit_message); - //EditText editText = (EditText) mViewPager.getCurrentItem() ).findViewById(R.id.edit_message); - //String message = editText.getText().toString(); - String message = "Item number = "; - intent.putExtra(EXTRA_MESSAGE, message); - startActivity(intent); - } -} diff --git a/app/src/main/java/nl/digital_me/dummyandroidapp/DisplayMessageActivity.java b/app/src/main/java/nl/digital_me/dummyandroidapp/DisplayMessageActivity.java deleted file mode 100644 index c6d6fb9..0000000 --- a/app/src/main/java/nl/digital_me/dummyandroidapp/DisplayMessageActivity.java +++ /dev/null @@ -1,27 +0,0 @@ -package nl.digital_me.dummyandroidapp; - -import android.content.Intent; -import android.os.Bundle; -import android.widget.TextView; - -import androidx.appcompat.app.AppCompatActivity; - -public class DisplayMessageActivity extends AppCompatActivity { - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - // Get the message from the intent - Intent intent = getIntent(); - String message = intent.getStringExtra(BrowseCard.EXTRA_MESSAGE); - - // Create the text view - TextView textView = new TextView(this); - textView.setTextSize(40); - textView.setText(message); - - // Set the text view as the activity layout - setContentView(textView); - } -} diff --git a/app/src/main/res/layout/activity_display_message.xml b/app/src/main/res/layout/activity_display_message.xml index f55dfde..0a9d26d 100644 --- a/app/src/main/res/layout/activity_display_message.xml +++ b/app/src/main/res/layout/activity_display_message.xml @@ -5,7 +5,7 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true" - tools:context="nl.digital_me.dummyandroidapp.DisplayMessageActivity"> + tools:context="net.dolden.dummyand.DisplayMessageActivity"> diff --git a/app/src/production/google-services.json b/app/src/production/google-services.json index a68b13d..e002b9c 100644 --- a/app/src/production/google-services.json +++ b/app/src/production/google-services.json @@ -8,67 +8,9 @@ "client": [ { "client_info": { - "mobilesdk_app_id": "1:73241222539:android:9c5bd06ebcfc632412e38e", + "mobilesdk_app_id": "1:73241222539:android:48af22f54cb8511712e38e", "android_client_info": { - "package_name": "nl.digital_me.dummyandroidapp" - } - }, - "oauth_client": [ - { - "client_id": "73241222539-cndrmso63ealc3k6ateaip0h94h85l8g.apps.googleusercontent.com", - "client_type": 3 - } - ], - "api_key": [ - { - "current_key": "AIzaSyC3moppmy85R7j5ADC4yZazE9FA32mb5J8" - } - ], - "services": { - "appinvite_service": { - "other_platform_oauth_client": [ - { - "client_id": "73241222539-cndrmso63ealc3k6ateaip0h94h85l8g.apps.googleusercontent.com", - "client_type": 3 - } - ] - } - } - }, - { - "client_info": { - "mobilesdk_app_id": "1:73241222539:android:b54cdbef562781b312e38e", - "android_client_info": { - "package_name": "nl.digital_me.dummyandroidapp.acc" - } - }, - "oauth_client": [ - { - "client_id": "73241222539-cndrmso63ealc3k6ateaip0h94h85l8g.apps.googleusercontent.com", - "client_type": 3 - } - ], - "api_key": [ - { - "current_key": "AIzaSyC3moppmy85R7j5ADC4yZazE9FA32mb5J8" - } - ], - "services": { - "appinvite_service": { - "other_platform_oauth_client": [ - { - "client_id": "73241222539-cndrmso63ealc3k6ateaip0h94h85l8g.apps.googleusercontent.com", - "client_type": 3 - } - ] - } - } - }, - { - "client_info": { - "mobilesdk_app_id": "1:73241222539:android:2755489b34d07e8912e38e", - "android_client_info": { - "package_name": "nl.digital_me.dummyandroidapp.dev2" + "package_name": "net.dolden.dummyand" } }, "oauth_client": [ diff --git a/app/src/test/java/net/dolden/dummyand/ExampleUnitTest.java b/app/src/test/java/net/dolden/dummyand/ExampleUnitTest.java new file mode 100644 index 0000000..54a9e23 --- /dev/null +++ b/app/src/test/java/net/dolden/dummyand/ExampleUnitTest.java @@ -0,0 +1,15 @@ +package app.src.test.java.net.dolden.dummyand; + +import org.junit.Test; + +import static org.junit.Assert.*; + +/** + * To work on unit tests, switch the Test Artifact in the Build Variants view. + */ +public class ExampleUnitTest { + @Test + public void addition_isCorrect() throws Exception { + assertEquals(4, 2 + 2); + } +} diff --git a/app/src/test/java/nl/digital_me/dummyandroidapp/ExampleUnitTest.java b/app/src/test/java/nl/digital_me/dummyandroidapp/ExampleUnitTest.java deleted file mode 100644 index 91ce6df..0000000 --- a/app/src/test/java/nl/digital_me/dummyandroidapp/ExampleUnitTest.java +++ /dev/null @@ -1,15 +0,0 @@ -package nl.digital_me.dummyandroidapp; - -import org.junit.Test; - -import static org.junit.Assert.*; - -/** - * To work on unit tests, switch the Test Artifact in the Build Variants view. - */ -public class ExampleUnitTest { - @Test - public void addition_isCorrect() throws Exception { - assertEquals(4, 2 + 2); - } -} diff --git a/fastlane/metadata/android/en-US/full_description.txt b/fastlane/metadata/android/en-US/full_description.txt index beeaff3..32cdace 100644 --- a/fastlane/metadata/android/en-US/full_description.txt +++ b/fastlane/metadata/android/en-US/full_description.txt @@ -1 +1 @@ -This app has for only goal to help Digital-Me to implement, test and improve the Continuous Integration and Delivery of any current and future mobile apps in Google Play store. +This app has for solely purpose to help implementing, testing and improving Continuous Integration and Delivery of any current and future mobile apps in Google Play store. \ No newline at end of file diff --git a/fastlane/metadata/android/nl-NL/full_description.txt b/fastlane/metadata/android/nl-NL/full_description.txt index 5c1635c..32cdace 100644 --- a/fastlane/metadata/android/nl-NL/full_description.txt +++ b/fastlane/metadata/android/nl-NL/full_description.txt @@ -1 +1 @@ -This app has for only goal to help Digital-Me to implement, test and improve the Continuous Integration and Delivery of any current and future mobile apps in Google Play store. \ No newline at end of file +This app has for solely purpose to help implementing, testing and improving Continuous Integration and Delivery of any current and future mobile apps in Google Play store. \ No newline at end of file