1
0
Fork 0
mirror of https://github.com/ethauvin/android-about-box.git synced 2025-04-26 02:57:12 -07:00

Compare commits

..

No commits in common. "master" and "1.2.0" have entirely different histories.

10 changed files with 41 additions and 97 deletions

View file

@ -1,7 +1,5 @@
[![Circle CI](https://circleci.com/gh/eggheadgames/android-about-box.svg?style=svg)](https://circleci.com/gh/eggheadgames/android-about-box)
[![Release](https://jitpack.io/v/eggheadgames/android-about-box.svg)](https://jitpack.io/#eggheadgames/android-about-box)
![Downloads](https://jitpack.io/v/eggheadgames/android-about-box/month.svg)
[![GitHub license](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/eggheadgames/android-about-box/blob/develop/LICENSE)
# About Box
A modern About Box for an Android App built on the [daniel-stoneuk/material-about-library](https://github.com/daniel-stoneuk/material-about-library).
@ -14,7 +12,7 @@ Android About Box is configured with a set of (mostly) strings for the company n
When triggered from a menu item, it will display the app name, icon and version, provide links to contact support, leave a review, share the app, go to other apps by the same company in the app store -- as well as links to Facebook etc.
You can omit most features if they don't apply (e.g. like website), by not setting the values.
As of version 1.2.0, you can omit many features that don't apply (e.g. like website), by not setting the values.
## Installation Instructions
@ -45,7 +43,6 @@ Add AboutBox configuration to your Application class
aboutConfig.appName = getString(R.string.app_name);
aboutConfig.appIcon = R.mipmap.ic_launcher;
aboutConfig.version = "1.0.0";
aboutConfig.author = "Tolstoy";
aboutConfig.aboutLabelTitle = "About App";
aboutConfig.packageName = getApplicationContext().getPackageName();
aboutConfig.buildType = google ? AboutConfig.BuildType.GOOGLE : AboutConfig.BuildType.AMAZON;
@ -106,7 +103,6 @@ By default, the default Android share intent will be called with the values spec
aboutConfig.shareMessage = getString(R.string.share_message);
aboutConfig.sharingTitle = getString(R.string.sharing_title);
```
The `share_message` string will have an app store URL appended to it (appropriately constructed for Google Play or Amazon).
Alternatively, you can provide a custom sharing function (and omit `shareMessage` and `sharingTitle`):
```java

View file

@ -1,7 +1,7 @@
dependencies:
pre:
- 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.3
- echo y | android update sdk --no-ui --all --filter build-tools-25.0.2
test:
override:

View file

@ -5,14 +5,14 @@ apply plugin: 'com.github.dcendents.android-maven'
group='com.github.eggheadgames'
android {
compileSdkVersion 25
buildToolsVersion "25.0.3"
compileSdkVersion 24
buildToolsVersion "25.0.2"
defaultConfig {
minSdkVersion 15
targetSdkVersion 24
versionCode 7
versionName "1.3.1"
versionCode 4
versionName "1.2.0"
}
buildTypes {
release {
@ -28,5 +28,5 @@ android {
}
dependencies {
compile 'com.github.daniel-stoneuk:material-about-library:2.2.1'
compile 'com.github.daniel-stoneuk:material-about-library:1.8.2'
}

View file

@ -8,9 +8,6 @@ import android.widget.Toast;
public final class AboutBoxUtils {
public final static String playStoreAppURI = "https://play.google.com/store/apps/details?id=";
public final static String amznStoreAppURI = "https://www.amazon.com/gp/mas/dl/android?p=";
private AboutBoxUtils() {
//nothing
}
@ -52,11 +49,11 @@ public final class AboutBoxUtils {
switch (buildType) {
case GOOGLE:
appURI = "market://details?id=" + packageName;
webURI = playStoreAppURI + packageName;
webURI = "http://play.google.com/store/apps/details?id=" + packageName;
break;
case AMAZON:
appURI = "amzn://apps/android?p=" + packageName;
webURI = amznStoreAppURI + packageName;
webURI = "http://www.amazon.com/gp/mas/dl/android?p=" + packageName;
break;
default:
//nothing
@ -69,17 +66,8 @@ public final class AboutBoxUtils {
String webURI = null;
switch (buildType) {
case GOOGLE:
// see:
// https://developer.android.com/distribute/marketing-tools/linking-to-google-play.html#OpeningPublisher
// https://stackoverflow.com/questions/32029408/how-to-open-developer-page-on-google-play-store-market
// https://issuetracker.google.com/65244694
if (publisher.matches("\\d+")) {
webURI = "https://play.google.com/store/apps/dev?id=" + publisher;
appURI = webURI;
} else {
appURI = "market://search?q=pub:" + publisher;
webURI = "https://play.google.com/store/search?q=pub:" + publisher;
}
appURI = "market://search?q=pub:" + publisher;
webURI = "http://play.google.com/store/search?q=pub:" + publisher;
break;
case AMAZON:
appURI = "amzn://apps/android?showAll=1&p=" + packageName;

View file

@ -8,9 +8,6 @@ public class AboutConfig {
public String appName;
public int appIcon;
public String version;
public String author;
public String extra;
public String extraTitle;
public String aboutLabelTitle;
public String logUiEventName;
public String facebookUserName;

View file

@ -8,7 +8,7 @@ import android.text.TextUtils;
import com.danielstone.materialaboutlibrary.MaterialAboutActivity;
import com.danielstone.materialaboutlibrary.items.MaterialAboutActionItem;
import com.danielstone.materialaboutlibrary.items.MaterialAboutItemOnClickAction;
import com.danielstone.materialaboutlibrary.items.MaterialAboutItemOnClickListener;
import com.danielstone.materialaboutlibrary.items.MaterialAboutTitleItem;
import com.danielstone.materialaboutlibrary.model.MaterialAboutCard;
import com.danielstone.materialaboutlibrary.model.MaterialAboutList;
@ -23,7 +23,6 @@ public class AboutActivity extends MaterialAboutActivity {
public static void launch(Activity activity) {
Intent intent = new Intent(activity, AboutActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
activity.startActivity(intent);
}
@ -55,21 +54,6 @@ public class AboutActivity extends MaterialAboutActivity {
.text(R.string.egab_version)
.subText(config.version)
.build());
if (!TextUtils.isEmpty(config.author)) {
generalInfoCardBuilder.addItem(new MaterialAboutActionItem.Builder()
.text(R.string.egab_author)
.subText(config.author)
.build());
}
if (!TextUtils.isEmpty(config.extra) && !TextUtils.isEmpty(config.extraTitle)) {
generalInfoCardBuilder.addItem(new MaterialAboutActionItem.Builder()
.text(config.extraTitle)
.subTextHtml(config.extra)
.build());
}
return generalInfoCardBuilder.build();
}
@ -79,9 +63,9 @@ public class AboutActivity extends MaterialAboutActivity {
if (!TextUtils.isEmpty(config.guideHtmlPath)) {
card.addItem(itemHelper(R.string.egab_guide, R.drawable.ic_help_green,
new MaterialAboutItemOnClickAction() {
new MaterialAboutItemOnClickListener() {
@Override
public void onClick() {
public void onClick(boolean b) {
if (config.dialog == null) {
AboutBoxUtils.openHTMLPage(AboutActivity.this, config.guideHtmlPath);
} else {
@ -93,9 +77,9 @@ public class AboutActivity extends MaterialAboutActivity {
);
}
card.addItem(itemHelper(R.string.egab_contact_support, R.drawable.ic_email_black,
new MaterialAboutItemOnClickAction() {
new MaterialAboutItemOnClickListener() {
@Override
public void onClick() {
public void onClick(boolean b) {
EmailUtil.contactUs(AboutActivity.this);
logUIEventName(config.analytics, config.logUiEventName, getString(R.string.egab_contact_log_event));
}
@ -109,18 +93,18 @@ public class AboutActivity extends MaterialAboutActivity {
MaterialAboutCard.Builder card = new MaterialAboutCard.Builder();
if (config.buildType != null && !TextUtils.isEmpty(config.packageName)) {
card.addItem(itemHelper(R.string.egab_leave_review, R.drawable.ic_review,
new MaterialAboutItemOnClickAction() {
new MaterialAboutItemOnClickListener() {
@Override
public void onClick() {
public void onClick(boolean b) {
AboutBoxUtils.openApp(AboutActivity.this, 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 MaterialAboutItemOnClickAction() {
new MaterialAboutItemOnClickListener() {
@Override
public void onClick() {
public void onClick(boolean b) {
if (config.share == null) {
ShareUtil.share(AboutActivity.this);
} else {
@ -137,22 +121,22 @@ public class AboutActivity extends MaterialAboutActivity {
MaterialAboutCard.Builder card = new MaterialAboutCard.Builder();
if (config.buildType != null && !TextUtils.isEmpty(config.appPublisher) && !TextUtils.isEmpty(config.packageName)) {
card.addItem(itemHelper(R.string.egab_try_other_apps, R.drawable.ic_try_other_apps,
new MaterialAboutItemOnClickAction() {
new MaterialAboutItemOnClickListener() {
@Override
public void onClick() {
public void onClick(boolean b) {
AboutBoxUtils.openPublisher(AboutActivity.this, config.buildType,
config.appPublisher, config.packageName);
logUIEventName(config.analytics, config.logUiEventName, getString(R.string.egab_try_other_app_log_event));
}
}));
}
if (!TextUtils.isEmpty(config.companyHtmlPath) && !TextUtils.isEmpty(config.aboutLabelTitle)) {
if (!TextUtils.isEmpty(config.companyHtmlPath)) {
card.addItem(new MaterialAboutActionItem.Builder()
.text(config.aboutLabelTitle)
.icon(R.drawable.ic_about_black)
.setOnClickAction(new MaterialAboutItemOnClickAction() {
.setOnClickListener(new MaterialAboutItemOnClickListener() {
@Override
public void onClick() {
public void onClick(boolean b) {
if (config.dialog == null) {
AboutBoxUtils.openHTMLPage(AboutActivity.this, config.companyHtmlPath);
} else {
@ -174,9 +158,9 @@ public class AboutActivity extends MaterialAboutActivity {
.text(R.string.egab_facebook_label)
.subText(config.facebookUserName)
.icon(R.drawable.ic_facebook_24)
.setOnClickAction(new MaterialAboutItemOnClickAction() {
.setOnClickListener(new MaterialAboutItemOnClickListener() {
@Override
public void onClick() {
public void onClick(boolean b) {
AboutBoxUtils.getOpenFacebookIntent(AboutActivity.this, config.facebookUserName);
logUIEventName(config.analytics, config.logUiEventName, getString(R.string.egab_facebook_log_event));
}
@ -188,9 +172,9 @@ public class AboutActivity extends MaterialAboutActivity {
.text(R.string.egab_twitter_label)
.subText(config.twitterUserName)
.icon(R.drawable.ic_twitter_24dp)
.setOnClickAction(new MaterialAboutItemOnClickAction() {
.setOnClickListener(new MaterialAboutItemOnClickListener() {
@Override
public void onClick() {
public void onClick(boolean b) {
AboutBoxUtils.startTwitter(AboutActivity.this, config.twitterUserName);
logUIEventName(config.analytics, config.logUiEventName, getString(R.string.egab_twitter_log_event));
}
@ -200,11 +184,11 @@ public class AboutActivity extends MaterialAboutActivity {
if (!TextUtils.isEmpty(config.webHomePage)) {
card.addItem(new MaterialAboutActionItem.Builder()
.text(R.string.egab_web_label)
.subText(config.webHomePage.replaceFirst("^https?://", "").replaceAll("/$", ""))
.subText(config.webHomePage.replace("https://", "").replace("http://", "").replace("/", ""))
.icon(R.drawable.ic_web_black_24dp)
.setOnClickAction(new MaterialAboutItemOnClickAction() {
.setOnClickListener(new MaterialAboutItemOnClickListener() {
@Override
public void onClick() {
public void onClick(boolean b) {
AboutBoxUtils.openHTMLPage(AboutActivity.this, config.webHomePage);
logUIEventName(config.analytics, config.logUiEventName, getString(R.string.egab_website_log_event));
}
@ -219,9 +203,9 @@ public class AboutActivity extends MaterialAboutActivity {
MaterialAboutCard.Builder card = new MaterialAboutCard.Builder();
if (!TextUtils.isEmpty(config.privacyHtmlPath)) {
card.addItem(itemHelper(R.string.egab_privacy_policy, R.drawable.ic_privacy,
new MaterialAboutItemOnClickAction() {
new MaterialAboutItemOnClickListener() {
@Override
public void onClick() {
public void onClick(boolean b) {
if (config.dialog == null) {
AboutBoxUtils.openHTMLPage(AboutActivity.this, config.privacyHtmlPath);
} else {
@ -235,9 +219,9 @@ public class AboutActivity extends MaterialAboutActivity {
}
if (!TextUtils.isEmpty(config.acknowledgmentHtmlPath)) {
card.addItem(itemHelper(R.string.egab_acknowledgements, R.drawable.ic_acknowledgements,
new MaterialAboutItemOnClickAction() {
new MaterialAboutItemOnClickListener() {
@Override
public void onClick() {
public void onClick(boolean b) {
if (config.dialog == null) {
AboutBoxUtils.openHTMLPage(AboutActivity.this, config.acknowledgmentHtmlPath);
} else {
@ -251,11 +235,11 @@ public class AboutActivity extends MaterialAboutActivity {
return card.build();
}
private MaterialAboutActionItem itemHelper(int name, int icon, MaterialAboutItemOnClickAction clickAction) {
private MaterialAboutActionItem itemHelper(int name, int icon, MaterialAboutItemOnClickListener listener) {
return new MaterialAboutActionItem.Builder()
.text(name)
.icon(icon)
.setOnClickAction(clickAction)
.setOnClickListener(listener)
.build();
}

View file

@ -2,9 +2,7 @@ package com.eggheadgames.aboutbox.share;
import android.app.Activity;
import android.content.Intent;
import android.text.TextUtils;
import com.eggheadgames.aboutbox.AboutBoxUtils;
import com.eggheadgames.aboutbox.AboutConfig;
public final class ShareUtil {
@ -19,24 +17,7 @@ public final class ShareUtil {
Intent intent2 = new Intent();
intent2.setAction(Intent.ACTION_SEND);
intent2.setType("text/plain");
String shareMessage = config.shareMessage;
if (!TextUtils.isEmpty(config.packageName) && !TextUtils.isEmpty(shareMessage) && config.buildType != null) {
switch (config.buildType) {
case GOOGLE:
shareMessage = shareMessage + AboutBoxUtils.playStoreAppURI + config.packageName;
break;
case AMAZON:
shareMessage = shareMessage + AboutBoxUtils.amznStoreAppURI + config.packageName;
break;
default:
break;
}
}
intent2.putExtra(Intent.EXTRA_TEXT, shareMessage);
intent2.putExtra(Intent.EXTRA_TEXT, config.shareMessage);
activity.startActivity(Intent.createChooser(intent2, config.sharingTitle));
}
}

View file

@ -3,7 +3,6 @@
<string name="egab_contact_support">Contactar o Suporte</string>
<string name="egab_try_other_apps">Experimentar outras aplicações</string>
<string name="egab_version">Versão</string>
<string name="egab_author">Autor</string>
<string name="egab_facebook_label">Facebook</string>
<string name="egab_twitter_label">Twitter</string>
<string name="egab_web_label">Web</string>

View file

@ -3,7 +3,6 @@
<string name="egab_contact_support">Contact Support</string>
<string name="egab_try_other_apps">Try Other Apps</string>
<string name="egab_version">Version</string>
<string name="egab_author">Author</string>
<string name="egab_facebook_label">Facebook</string>
<string name="egab_twitter_label">Twitter</string>
<string name="egab_web_label">Web</string>

View file

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="AppTheme.MaterialAboutActivity" parent="Theme.Mal.Light.DarkActionBar" >
<style name="AppTheme.MaterialAboutActivity" parent="Theme.Mal" >
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>