diff --git a/circle.yml b/circle.yml index e6a8356..ed917c0 100644 --- a/circle.yml +++ b/circle.yml @@ -1,7 +1,7 @@ dependencies: pre: - - echo y | android update sdk --no-ui --all --filter tools,platform-tools,android-24 - - echo y | android update sdk --no-ui --all --filter build-tools-24.0.2 + - echo y | android update sdk --no-ui --all --filter tools,platform-tools,android-25 + - echo y | android update sdk --no-ui --all --filter build-tools-25.0.2 test: override: diff --git a/library/build.gradle b/library/build.gradle index df52f18..0cc4ab4 100644 --- a/library/build.gradle +++ b/library/build.gradle @@ -6,7 +6,7 @@ group='com.github.eggheadgames' android { compileSdkVersion 24 - buildToolsVersion "24.0.2" + buildToolsVersion "25.0.2" defaultConfig { minSdkVersion 15 @@ -29,7 +29,7 @@ android { dependencies { compile 'com.github.daniel-stoneuk:material-about-library:1.8.2' - compile('io.branch.sdk.android:library:2.5.7') { + compile('io.branch.sdk.android:library:2.6.1') { exclude module: 'answers.shim' } } diff --git a/library/src/main/java/com/eggheadgames/aboutbox/AboutConfig.java b/library/src/main/java/com/eggheadgames/aboutbox/AboutConfig.java index 490fc95..64bb21d 100644 --- a/library/src/main/java/com/eggheadgames/aboutbox/AboutConfig.java +++ b/library/src/main/java/com/eggheadgames/aboutbox/AboutConfig.java @@ -13,6 +13,7 @@ public class AboutConfig { public String facebookUserName; public String twitterUserName; public String webHomePage; + public String guideHtmlPath; public String appPublisher; public String companyHtmlPath; public String privacyHtmlPath; diff --git a/library/src/main/java/com/eggheadgames/aboutbox/activity/AboutActivity.java b/library/src/main/java/com/eggheadgames/aboutbox/activity/AboutActivity.java index 6bc3c9c..74ec6fc 100644 --- a/library/src/main/java/com/eggheadgames/aboutbox/activity/AboutActivity.java +++ b/library/src/main/java/com/eggheadgames/aboutbox/activity/AboutActivity.java @@ -5,6 +5,8 @@ import android.content.ActivityNotFoundException; import android.content.Context; import android.content.Intent; import android.net.Uri; +import android.support.annotation.NonNull; +import android.text.TextUtils; import android.widget.Toast; import com.danielstone.materialaboutlibrary.MaterialAboutActivity; @@ -14,6 +16,7 @@ import com.danielstone.materialaboutlibrary.items.MaterialAboutTitleItem; import com.danielstone.materialaboutlibrary.model.MaterialAboutCard; import com.danielstone.materialaboutlibrary.model.MaterialAboutList; import com.eggheadgames.aboutbox.AboutConfig; +import com.eggheadgames.aboutbox.IAnalytic; import com.eggheadgames.aboutbox.R; import com.eggheadgames.aboutbox.share.EmailUtil; import com.eggheadgames.aboutbox.share.ShareUtil; @@ -30,6 +33,18 @@ public class AboutActivity extends MaterialAboutActivity { final AboutConfig config = AboutConfig.getInstance(); + return new MaterialAboutList.Builder() + .addCard(buildGeneralInfoCard(config)) + .addCard(buildSupportCard(config)) + .addCard(buildShareCard(config)) + .addCard(buildAboutCard(config)) + .addCard(buildSocialNetworksCard(config)) + .addCard(buildPrivacyCard(config)) + .build(); + } + + @NonNull + private MaterialAboutCard buildGeneralInfoCard(AboutConfig config) { MaterialAboutCard.Builder generalInfoCardBuilder = new MaterialAboutCard.Builder(); generalInfoCardBuilder.addItem(new MaterialAboutTitleItem.Builder() @@ -41,180 +56,184 @@ public class AboutActivity extends MaterialAboutActivity { .text(R.string.egab_version) .subText(config.version) .build()); - - - MaterialAboutCard.Builder supportCardBuilder = new MaterialAboutCard.Builder(); - supportCardBuilder.addItem(new MaterialAboutActionItem.Builder() - .text(R.string.egab_contact_support) - .icon(R.drawable.ic_email_black) - .setOnClickListener(new MaterialAboutItemOnClickListener() { - @Override - public void onClick(boolean b) { - EmailUtil.contactUs(AboutActivity.this); - if (config.analytics != null) { - config.analytics.logUiEvent(config.logUiEventName, getString(R.string.egab_contact_log_event)); - } - } - }).build()); - - - MaterialAboutCard.Builder shareCardBuilder = new MaterialAboutCard.Builder(); - shareCardBuilder.addItem(new MaterialAboutActionItem.Builder() - .text(R.string.egab_leave_review) - .icon(R.drawable.ic_review) - .setOnClickListener(new MaterialAboutItemOnClickListener() { - @Override - public void onClick(boolean b) { - openApp(config.buildType, config.packageName); - if (config.analytics != null) { - config.analytics.logUiEvent(config.logUiEventName, getString(R.string.egab_review_log_event)); - } - } - }) - .build()); - shareCardBuilder.addItem(new MaterialAboutActionItem.Builder() - .text(R.string.egab_share) - .icon(R.drawable.ic_share_black) - .setOnClickListener(new MaterialAboutItemOnClickListener() { - @Override - public void onClick(boolean b) { - ShareUtil.share(AboutActivity.this); - if (config.analytics != null) { - config.analytics.logUiEvent(config.logUiEventName, getString(R.string.egab_share_log_event)); - } - } - }) - .build()); - - - MaterialAboutCard.Builder aboutCardBuilder = new MaterialAboutCard.Builder(); - aboutCardBuilder.addItem(new MaterialAboutActionItem.Builder() - .text(R.string.egab_try_other_apps) - .icon(R.drawable.ic_try_other_apps) - .setOnClickListener(new MaterialAboutItemOnClickListener() { - @Override - public void onClick(boolean b) { - openPublisher(config.buildType, config.appPublisher, config.packageName); - if (config.analytics != null) { - config.analytics.logUiEvent(config.logUiEventName, getString(R.string.egab_try_other_app_log_event)); - } - } - }) - .build()); - aboutCardBuilder.addItem(new MaterialAboutActionItem.Builder() - .text(config.aboutLabelTitle) - .icon(R.drawable.ic_about_black) - .setOnClickListener(new MaterialAboutItemOnClickListener() { - @Override - public void onClick(boolean b) { - if (config.dialog == null) { - startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(config.companyHtmlPath))); - } else { - config.dialog.open(AboutActivity.this, config.companyHtmlPath, config.aboutLabelTitle); - } - - if (config.analytics != null) { - config.analytics.logUiEvent(config.logUiEventName, config.aboutLabelTitle); - } - } - }) - .build()); - - - MaterialAboutCard.Builder socialNetworksCardBuilder = new MaterialAboutCard.Builder(); - socialNetworksCardBuilder.addItem(new MaterialAboutActionItem.Builder() - .text(R.string.egab_facebook_label) - .subText(config.facebookUserName) - .icon(R.drawable.ic_facebook_24) - .setOnClickListener(new MaterialAboutItemOnClickListener() { - @Override - public void onClick(boolean b) { - getOpenFacebookIntent(AboutActivity.this, config.facebookUserName); - if (config.analytics != null) { - config.analytics.logUiEvent(config.logUiEventName, getString(R.string.egab_facebook_log_event)); - } - } - }) - .build()); - socialNetworksCardBuilder.addItem(new MaterialAboutActionItem.Builder() - .text(R.string.egab_twitter_label) - .subText(config.twitterUserName) - .icon(R.drawable.ic_twitter_24dp) - .setOnClickListener(new MaterialAboutItemOnClickListener() { - @Override - public void onClick(boolean b) { - startTwitter(AboutActivity.this, config.twitterUserName); - if (config.analytics != null) { - config.analytics.logUiEvent(config.logUiEventName, getString(R.string.egab_twitter_log_event)); - } - } - }) - .build()); - - socialNetworksCardBuilder.addItem(new MaterialAboutActionItem.Builder() - .text(R.string.egab_web_label) - .subText(config.webHomePage.replace("https://", "").replace("http://", "").replace("/", "")) - .icon(R.drawable.ic_web_black_24dp) - .setOnClickListener(new MaterialAboutItemOnClickListener() { - @Override - public void onClick(boolean b) { - startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(config.webHomePage))); - if (config.analytics != null) { - config.analytics.logUiEvent(config.logUiEventName, getString(R.string.egab_website_log_event)); - } - } - }) - .build()); - - MaterialAboutCard.Builder privacyCardBuilder = new MaterialAboutCard.Builder(); - privacyCardBuilder.addItem(new MaterialAboutActionItem.Builder() - .text(R.string.egab_privacy_policy) - .icon(R.drawable.ic_privacy) - .setOnClickListener(new MaterialAboutItemOnClickListener() { - @Override - public void onClick(boolean b) { - if (config.dialog == null) { - startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(config.privacyHtmlPath))); - } else { - config.dialog.open(AboutActivity.this, config.privacyHtmlPath, getString(R.string.egab_privacy_policy)); - } - - if (config.analytics != null) { - config.analytics.logUiEvent(config.logUiEventName, getString(R.string.egab_privacy_log_event)); - } - } - }) - .build()); - privacyCardBuilder.addItem(new MaterialAboutActionItem.Builder() - .text(R.string.egab_acknowledgements) - .icon(R.drawable.ic_acknowledgements) - .setOnClickListener(new MaterialAboutItemOnClickListener() { - @Override - public void onClick(boolean b) { - if (config.dialog == null) { - startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(config.acknowledgmentHtmlPath))); - } else { - config.dialog.open(AboutActivity.this, config.acknowledgmentHtmlPath, getString(R.string.egab_acknowledgements)); - } - - if (config.analytics != null) { - config.analytics.logUiEvent(config.logUiEventName, getString(R.string.egab_acknowledgements_log_event)); - } - } - }) - .build()); - - - return new MaterialAboutList.Builder() - .addCard(generalInfoCardBuilder.build()) - .addCard(supportCardBuilder.build()) - .addCard(shareCardBuilder.build()) - .addCard(aboutCardBuilder.build()) - .addCard(socialNetworksCardBuilder.build()) - .addCard(privacyCardBuilder.build()) - .build(); + return generalInfoCardBuilder.build(); } + @NonNull + private MaterialAboutCard buildSupportCard(final AboutConfig config) { + MaterialAboutCard.Builder card = new MaterialAboutCard.Builder(); + + if (!TextUtils.isEmpty(config.guideHtmlPath)) { + card.addItem(itemHelper(R.string.egab_guide, R.drawable.ic_help_green, + new MaterialAboutItemOnClickListener() { + @Override + public void onClick(boolean b) { + if (config.dialog == null) { + openHTMLPage(config.guideHtmlPath); + } else { + config.dialog.open(AboutActivity.this, config.guideHtmlPath, getString(R.string.egab_guide)); + } + logUIEventName(config.analytics, config.logUiEventName, getString(R.string.egab_guide)); + } + }) + ); + } + card.addItem(itemHelper(R.string.egab_contact_support, R.drawable.ic_email_black, + new MaterialAboutItemOnClickListener() { + @Override + public void onClick(boolean b) { + EmailUtil.contactUs(AboutActivity.this); + logUIEventName(config.analytics, config.logUiEventName, getString(R.string.egab_contact_log_event)); + } + })); + + return card.build(); + } + + @NonNull + private MaterialAboutCard buildShareCard(final AboutConfig config) { + MaterialAboutCard.Builder card = new MaterialAboutCard.Builder(); + + card.addItem(itemHelper(R.string.egab_leave_review, R.drawable.ic_review, + new MaterialAboutItemOnClickListener() { + @Override + public void onClick(boolean b) { + openApp(config.buildType, config.packageName); + logUIEventName(config.analytics, config.logUiEventName, getString(R.string.egab_review_log_event)); + } + })); + + card.addItem(itemHelper(R.string.egab_share, R.drawable.ic_share_black, + new MaterialAboutItemOnClickListener() { + @Override + public void onClick(boolean b) { + ShareUtil.share(AboutActivity.this); + logUIEventName(config.analytics, config.logUiEventName, getString(R.string.egab_share_log_event)); + } + })); + + return card.build(); + } + + @NonNull + private MaterialAboutCard buildAboutCard(final AboutConfig config) { + MaterialAboutCard.Builder card = new MaterialAboutCard.Builder(); + + card.addItem(itemHelper(R.string.egab_try_other_apps, R.drawable.ic_try_other_apps, + new MaterialAboutItemOnClickListener() { + @Override + public void onClick(boolean b) { + openPublisher(config.buildType, config.appPublisher, config.packageName); + logUIEventName(config.analytics, config.logUiEventName, getString(R.string.egab_try_other_app_log_event)); + } + })); + card.addItem(new MaterialAboutActionItem.Builder() + .text(config.aboutLabelTitle) + .icon(R.drawable.ic_about_black) + .setOnClickListener(new MaterialAboutItemOnClickListener() { + @Override + public void onClick(boolean b) { + if (config.dialog == null) { + openHTMLPage(config.companyHtmlPath); + } else { + config.dialog.open(AboutActivity.this, config.companyHtmlPath, config.aboutLabelTitle); + } + logUIEventName(config.analytics, config.logUiEventName, config.aboutLabelTitle); + } + }) + .build()); + + return card.build(); + } + + @NonNull + private MaterialAboutCard buildSocialNetworksCard(final AboutConfig config) { + MaterialAboutCard.Builder card = new MaterialAboutCard.Builder(); + + card.addItem(new MaterialAboutActionItem.Builder() + .text(R.string.egab_facebook_label) + .subText(config.facebookUserName) + .icon(R.drawable.ic_facebook_24) + .setOnClickListener(new MaterialAboutItemOnClickListener() { + @Override + public void onClick(boolean b) { + getOpenFacebookIntent(AboutActivity.this, config.facebookUserName); + logUIEventName(config.analytics, config.logUiEventName, getString(R.string.egab_facebook_log_event)); + } + }) + .build()); + card.addItem(new MaterialAboutActionItem.Builder() + .text(R.string.egab_twitter_label) + .subText(config.twitterUserName) + .icon(R.drawable.ic_twitter_24dp) + .setOnClickListener(new MaterialAboutItemOnClickListener() { + @Override + public void onClick(boolean b) { + startTwitter(AboutActivity.this, config.twitterUserName); + logUIEventName(config.analytics, config.logUiEventName, getString(R.string.egab_twitter_log_event)); + } + }) + .build()); + + card.addItem(new MaterialAboutActionItem.Builder() + .text(R.string.egab_web_label) + .subText(config.webHomePage.replace("https://", "").replace("http://", "").replace("/", "")) + .icon(R.drawable.ic_web_black_24dp) + .setOnClickListener(new MaterialAboutItemOnClickListener() { + @Override + public void onClick(boolean b) { + openHTMLPage(config.webHomePage); + logUIEventName(config.analytics, config.logUiEventName, getString(R.string.egab_website_log_event)); + } + }) + .build()); + + return card.build(); + } + + @NonNull + private MaterialAboutCard buildPrivacyCard(final AboutConfig config) { + MaterialAboutCard.Builder card = new MaterialAboutCard.Builder(); + + card.addItem(itemHelper(R.string.egab_privacy_policy, R.drawable.ic_privacy, + new MaterialAboutItemOnClickListener() { + @Override + public void onClick(boolean b) { + if (config.dialog == null) { + openHTMLPage(config.privacyHtmlPath); + } else { + config.dialog.open(AboutActivity.this, config.privacyHtmlPath, getString(R.string.egab_privacy_policy)); + } + + logUIEventName(config.analytics, config.logUiEventName, getString(R.string.egab_privacy_log_event)); + } + }) + ); + card.addItem(itemHelper(R.string.egab_acknowledgements, R.drawable.ic_acknowledgements, + new MaterialAboutItemOnClickListener() { + @Override + public void onClick(boolean b) { + if (config.dialog == null) { + openHTMLPage(config.acknowledgmentHtmlPath); + } else { + config.dialog.open(AboutActivity.this, config.acknowledgmentHtmlPath, getString(R.string.egab_acknowledgements)); + } + logUIEventName(config.analytics, config.logUiEventName, getString(R.string.egab_acknowledgements_log_event)); + } + }) + ); + return card.build(); + } + + private MaterialAboutActionItem itemHelper(int name, int icon, MaterialAboutItemOnClickListener listener) { + return new MaterialAboutActionItem.Builder() + .text(name) + .icon(icon) + .setOnClickListener(listener) + .build(); + } + + @Override protected CharSequence getActivityTitle() { return getString(R.string.egab_about_screen_title); @@ -249,7 +268,6 @@ public class AboutActivity extends MaterialAboutActivity { Toast.makeText(context, R.string.egab_can_not_open, Toast.LENGTH_SHORT).show(); } } - } public void openApp(AboutConfig.BuildType buildType, String packageName) { @@ -267,7 +285,7 @@ public class AboutActivity extends MaterialAboutActivity { default: //nothing } - open(appURI, webURI); + openApplication(appURI, webURI); } public void openPublisher(AboutConfig.BuildType buildType, String publisher, String packageName) { @@ -285,18 +303,28 @@ public class AboutActivity extends MaterialAboutActivity { default: //nothing } - open(appURI, webURI); + openApplication(appURI, webURI); } - private void open(String appURI, String webURI) { + private void openApplication(String appURI, String webURI) { try { startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(appURI))); } catch (ActivityNotFoundException e1) { try { - startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(webURI))); + openHTMLPage(webURI); } catch (ActivityNotFoundException e2) { Toast.makeText(this, R.string.egab_can_not_open, Toast.LENGTH_SHORT).show(); } } } + + private void openHTMLPage(String htmlPath) { + startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(htmlPath))); + } + + private void logUIEventName(IAnalytic analytics, String eventType, String eventValue) { + if (analytics != null) { + analytics.logUiEvent(eventType, eventValue); + } + } } diff --git a/library/src/main/res/drawable/ic_help_green.xml b/library/src/main/res/drawable/ic_help_green.xml new file mode 100644 index 0000000..e1e7ce0 --- /dev/null +++ b/library/src/main/res/drawable/ic_help_green.xml @@ -0,0 +1,11 @@ + + + + + \ No newline at end of file diff --git a/library/src/main/res/values-pt/strings.xml b/library/src/main/res/values-pt/strings.xml index 9f31aeb..0e6a643 100644 --- a/library/src/main/res/values-pt/strings.xml +++ b/library/src/main/res/values-pt/strings.xml @@ -21,4 +21,5 @@ Acknowledgements Tu não tens nenhuma aplicação que possa abrir esta ligação Digite sua pergunta aqui: + Guia diff --git a/library/src/main/res/values/strings.xml b/library/src/main/res/values/strings.xml index cdf08c3..b979e55 100644 --- a/library/src/main/res/values/strings.xml +++ b/library/src/main/res/values/strings.xml @@ -21,5 +21,6 @@ Acknowledgements You don\'t have any app that can open this link Please type your question here: + Guide