Senior Software Engineer @ Originate
.
├── app # connects all of the modules together
│ ├── src
│ ├── build.gradle
├── common (library)
│ ├── src # common utilities and resources shared by multiple modules
│ ├── build.gradle
├── onboarding (library)
│ ├── src # onboarding specific source code & resources
│ ├── build.gradle
├── marketplace (library)
│ ├── src # marketplace specific source code & resources
│ ├── build.gradle
├── checkout (library)
│ ├── src # checkout specific source code & resources
│ ├── build.gradle
└── build.gradle
App
Onboarding
Marketplace
Checkout
Common
package com.ocandroid.common;
public abstract class AppCommonRouter {
private static AppCommonRouter instance;
// required to set instance since static methods can't be abstract
public static void setInstance(AppCommonRouter routerInstance) {
instance = routerInstance;
}
public static AppCommonRouter getInstance() {
return instance;
}
public abstract void startOnboarding(@NonNull Activity activity);
public abstract void startMarketplace(@NonNull Activity activity);
public abstract void startCheckout(@NonNull Activity activity);
}
package com.ocandroid.app;
public class AppRouter extends AppCommonRouter {
private static AppRouter instance = new AppRouter();
public static AppRouter getInstance() {
return instance;
}
public void startOnboarding(@NonNull Activity activity) {
// implementation here
}
public void startMarketplace(@NonNull Activity activity) {
// implementation here
}
public void startCheckout(@NonNull Activity activity) {
// implementation here
}
}
package com.ocandroid.app;
public class OCAndroidApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
AppCommonRouter.setInstance(AppRouter.getInstance());
// other app creation logic
}
}
package com.ocandroid.marketplace;
public class MarketplaceActivity extends AppCompatActivity {
// other app methods and variables
public void checkoutButtonClicked() {
AppCommonRouter.startCheckout(this);
}
}