Git Product home page Git Product logo

android-about-box's Introduction

Circle CI Release Downloads GitHub license

About Box

A modern About Box for an Android App built on the daniel-stoneuk/material-about-library.

Easily display the common items of an About Box in a modern Android friendly way

About

Android About Box is configured with a set of (mostly) strings for the company name, twitter and Facebook accounts, website, and filenames to html files for help files, privacy policy etc.

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.

Installation Instructions

Add the JitPack.io repository to your root build.gradle:

allprojects {
    repositories {
        maven { url "https://jitpack.io" }
    }
}

Add a dependency to your application related build.gradle

dependencies {
    compile 'com.github.eggheadgames:android-about-box:<actual version>'
}

Setup AboutBox

Add AboutBox configuration to your Application class

        AboutConfig aboutConfig = AboutConfig.getInstance();
        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;

        aboutConfig.facebookUserName = FACEBOOK_USER_NAME;
        aboutConfig.twitterUserName = TWITTER_USER_NAME;
        aboutConfig.webHomePage = WEB_HOME_PAGE;

        // app publisher for "Try Other Apps" item
        aboutConfig.appPublisher = APP_PUBLISHER;

        // if pages are stored locally, then you need to override aboutConfig.dialog to be able use custom WebView
        aboutConfig.companyHtmlPath = COMPANY_HTML_PATH;
        aboutConfig.privacyHtmlPath = PRIVACY_HTML_PATH;
        aboutConfig.acknowledgmentHtmlPath = ACKNOWLEDGMENT_HTML_PATH;

        aboutConfig.dialog = new IDialog() {
            @Override
            public void open(AppCompatActivity appCompatActivity, String url, String tag) {
               // handle custom implementations of WebView. It will be called when user click to web items. (Example: "Privacy", "Acknowledgments" and "About")
            }
        };

        aboutConfig.analytics = new IAnalytic() {
            @Override
            public void logUiEvent(String s, String s1) {
               // handle log events.
            }

            @Override
            public void logException(Exception e, boolean b) {
               // handle exception events.
            }
        };
        // set it only if aboutConfig.analytics is defined.
        aboutConfig.logUiEventName = "Log";

        // Contact Support email details
        aboutConfig.emailAddress = EMAIL_ADDRESS;
        aboutConfig.emailSubject = EMAIL_SUBJECT;
        aboutConfig.emailBody = EMAIL_BODY;

Open the About Box from your app

        AboutActivity.launch(activity);

Sharing

By default, the default Android share intent will be called with the values specified in shareMessage and sharingTitle. For example:

        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):

       aboutConfig.share = new IShare() {
           @Override
           public void share(Activity activity) {
               // do custom sharing
           }
       };

Theme

If you add the following to your AndroidManifest.xml file, the About Box will use these colours. This allows you to match your app colours:

        <activity
            android:name="com.eggheadgames.aboutbox.activity.AboutActivity"
            android:theme="@style/AppTheme.MaterialAboutActivity"/>

Ensure that AppTheme.MaterialAboutActivity theme extends either of these themes, and apply primary & accent colours:

Theme.MaterialComponents.DayNight
Theme.MaterialComponents.DayNight.DarkActionBar
Theme.MaterialComponents.Light
Theme.MaterialComponents.Light.DarkActionBar
  <style name="AppTheme.MaterialAboutActivity" parent="Theme.MaterialComponents.DayNight.DarkActionBar" >
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>

Screenshot

android-about-box's People

Contributors

alexdibrivnyy avatar eggheadgames avatar ethauvin avatar mikemee avatar personaljesusua avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

android-about-box's Issues

Add footer to email with information

Currently this code in the Email utility is not useful:

        if ("google".equals(BuildConfig.FLAVOR)) {
            emailSubject = config.emailSubject + "G";
        } else if ("amazon".equals(BuildConfig.FLAVOR)) {
            emailSubject = config.emailSubject + "K";
        } else {
            emailSubject = config.emailSubject;
        }

because the BuildConfig is not set now that it is a library. I.e. the final else is always used.

Instead, it would be nice to have a footer in the email body that looks something like:

Please type your question here:

<about 4 lines of whitespace>

---------------------
App version: 1.20.2 (43)
Android version: 5.0.3
Device: Samsung S3

I'm not sure what device information can be retrieved without enabling extra permissions. We should limit it to whatever is available with no special permissions.

Add Guide as an option first item on the menu

Add a new setting:

aboutConfig.guideHtmlPath

If this is null or empty, then there is no new behaviour. If it has a value, then In the same grouping as Contact Support, and above that entry, add a new item "Guide" which will display the associated html file.

Open about box with a button

I would like to implement the about activity only when the user taps an icon of about (or in a drop-down-the three dots menu) in app bar. How to implement that?

Adding other categories in the activity

I'm completely new to this. I've added the about activity but I can't see the Leave Review, Try Other Apps, About Egghead Games, Privacy Policy and Acknowledgement categories! Do I need to implement them manually or there is a code for it?

Fix crash for Facebook link

Crash reported:

Fatal Exception: android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=fb://profile/EggheadGames }
       at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1878)
       at android.app.Instrumentation.execStartActivity(Instrumentation.java:1545)
       at android.app.Activity.startActivityForResult(Activity.java:4283)
       at android.support.v4.app.BaseFragmentActivityJB.startActivityForResult(BaseFragmentActivityJB.java:50)
       at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:79)
       at android.app.Activity.startActivityForResult(Activity.java:4230)
       at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:859)
       at android.app.Activity.startActivity(Activity.java:4567)
       at android.app.Activity.startActivity(Activity.java:4535)
       at com.eggheadgames.aboutbox.activity.AboutActivity.getOpenFacebookIntent(AboutActivity.java:231)
       at com.eggheadgames.aboutbox.activity.AboutActivity$6.onClick(AboutActivity.java:132)
       at com.danielstone.materialaboutlibrary.adapters.MaterialAboutItemAdapter$MaterialAboutItemViewHolder.onClick(MaterialAboutItemAdapter.java:62)

Force close on launching AboutActivity

E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #2 Process: com.ingridtech.antivirus, PID: 782 java.lang.RuntimeException: An error occurred while executing doInBackground() at android.os.AsyncTask$3.done(AsyncTask.java:326) at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:354) at java.util.concurrent.FutureTask.setException(FutureTask.java:223) at java.util.concurrent.FutureTask.run(FutureTask.java:242) at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:244) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607) at java.lang.Thread.run(Thread.java:761) Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.String.replace(java.lang.CharSequence, java.lang.CharSequence)' on a null object reference at com.eggheadgames.aboutbox.activity.AboutActivity.buildSocialNetworksCard(AboutActivity.java:180) at com.eggheadgames.aboutbox.activity.AboutActivity.getMaterialAboutList(AboutActivity.java:41) at com.danielstone.materialaboutlibrary.MaterialAboutActivity$ListTask.doInBackground(MaterialAboutActivity.java:156) at com.danielstone.materialaboutlibrary.MaterialAboutActivity$ListTask.doInBackground(MaterialAboutActivity.java:146) at android.os.AsyncTask$2.call(AsyncTask.java:306) at java.util.concurrent.FutureTask.run(FutureTask.java:237) at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:244)ย  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)ย  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)ย  at java.lang.Thread.run(Thread.java:761)ย 

Add accessibility labels

Let's improve accessibility as suggested by Google Play as follows:

id/guide_toolbar/AppComatImageButton[0] "Close"

Screen Shot 2020-07-02 at 6 15 30 pm

id/mal_list_card - various

I don't think the cards add much value here given that the labels are clearly defined.

Per https://support.google.com/accessibility/android/answer/7158690, let's explicitly mark each of these cards as not requiring content:

Decorative images or images that don't convey meaningful information graphically do not require content labels. In these cases, set an android:contentDescription attribute of "@null" or an android:importantForAccessibility attribute of "no".

Screen Shot 2020-07-02 at 6 16 19 pm

Privacy policy is not shown

I recent use about box library 1.3.2 but i am not able to view privacy policy html when click on privacy policy, I am loading privacy policy html path from assets folder and my second issue is that still empty card is shown for appconfig.publisher which is set null

Twitter profile doesn't opens

When I tap on the Twitter list in the About activity, the Twitter app opens for a second, displays a toast "Cannot load the user's info. Please try again." How to resolve this? I've the following code line:

private static final String TWITTER_USER_NAME = "@vaibhav_khulbe";
and it's used as: aboutConfig.twitterUserName = TWITTER_USER_NAME;

I've also tried adding the Twitter profile URL but it displays the same toast. The link works fine with Chrome in my emulator.

Check for leaks

Per #53 (comment), let's see if we're leaking:

BTW - I'd recommend to use LeakCanary to detect leaks in this library, because I've found it to leak without even starting the AboutActivity...

Theme support

You could add support for the different themes added in 1.7.0.

Remove cards from About Activity

Is there a way to remove cards from About Activity? I know you can leave options null so that they don;t appear, but the an empty card will still appear. Can you remove the card entirely or do I need to implement it myself?

Change aboutConfig.buildType to be an enum

There is currently an aboutConfig. buildType that is a boolean where true means Google and false means Amazon. This makes the code confusing. Let's switch to an enum.
I suggest the following:

  • Add an enumeration store with values googlePlay and amazon (later other stores might be added). This replaces buildType.
  • Replace the buildType boolean with the store enum, defaulting to googlePlay if not set
  • replace the existing boolean parameters for platform type with the enum
  • replace all uses of AboutConfig.BuildType.GOOGLE with the enum value

Facebook link do not open

Facebook link do not open facebook app with the correct page or profile url.
It looks seem the code for facebook app is changed in the lastets versions.
I have tried and it works with "fb://page/" + FACEBOOK_PAGE_ID.
The code in this library using this URI: "fb://profile/" + name
Look at this line inAboutBoxUtils.java: Intent intent = new Intent("android.intent.action.VIEW", Uri.parse("fb://profile/" + name));

Please can you update the code?

Thank you and i'm sorry for my bad english.

Copyright & Author & About Company

I think the top section should include an Author and Copyright if specified. Thoughts?

The About Company X should be optional if no title is set.

I can take a crack at the implementation, pretty straightforward.

Fix email subject line

Currently the EmailUtil uses the Build config constant "flavor" which doesn't exist. It should use the aboutConfig.buildType instead.

This can be easily tested, because the email subject does not have "G" on the end of it as it should.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.