org.totschnig.myexpenses.activity.CommonCommands.java Source code

Java tutorial

Introduction

Here is the source code for org.totschnig.myexpenses.activity.CommonCommands.java

Source

/*   This file is part of My Expenses.
 *   My Expenses is free software: you can redistribute it and/or modify
 *   it under the terms of the GNU General Public License as published by
 *   the Free Software Foundation, either version 3 of the License, or
 *   (at your option) any later version.
 *
 *   My Expenses is distributed in the hope that it will be useful,
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *   GNU General Public License for more details.
 *
 *   You should have received a copy of the GNU General Public License
 *   along with My Expenses.  If not, see <http://www.gnu.org/licenses/>.
*/

package org.totschnig.myexpenses.activity;

import java.io.Serializable;

import org.totschnig.myexpenses.BuildConfig;
import org.totschnig.myexpenses.MyApplication;
import org.totschnig.myexpenses.R;
import org.totschnig.myexpenses.dialog.ContribInfoDialogFragment;
import org.totschnig.myexpenses.dialog.HelpDialogFragment;
import org.totschnig.myexpenses.model.ContribFeature;
import org.totschnig.myexpenses.util.HashLicenceHandler;
import org.totschnig.myexpenses.util.LicenceHandler;
import org.totschnig.myexpenses.util.Utils;

import android.app.Activity;
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.net.Uri;
import android.provider.Settings;
import android.support.v4.app.FragmentActivity;
import android.text.TextUtils;
import android.util.Log;
import android.widget.Toast;

public class CommonCommands {
    private CommonCommands() {
    }

    static boolean dispatchCommand(Activity ctx, int command, Object tag) {
        Intent i;
        switch (command) {
        case R.id.RATE_COMMAND:
            i = new Intent(Intent.ACTION_VIEW);
            i.setData(Uri.parse(MyApplication.getMarketSelfUri()));
            if (Utils.isIntentAvailable(ctx, i)) {
                ctx.startActivity(i);
            } else {
                Toast.makeText(ctx, R.string.error_accessing_market, Toast.LENGTH_LONG).show();
            }
            return true;
        case R.id.SETTINGS_COMMAND:
            i = new Intent(ctx, MyPreferenceActivity.class);
            i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            if (tag != null) {
                i.putExtra(MyPreferenceActivity.KEY_OPEN_PREF_KEY, (String) tag);
            }
            ctx.startActivityForResult(i, ProtectedFragmentActivity.PREFERENCES_REQUEST);
            return true;
        case R.id.FEEDBACK_COMMAND:
            i = new Intent(android.content.Intent.ACTION_SEND);
            i.setType("plain/text");
            i.putExtra(android.content.Intent.EXTRA_EMAIL, new String[] { MyApplication.FEEDBACK_EMAIL });
            i.putExtra(android.content.Intent.EXTRA_SUBJECT, "[" + ctx.getString(R.string.app_name) + "] Feedback");
            i.putExtra(android.content.Intent.EXTRA_TEXT,
                    getVersionInfo(ctx) + "\n" + ctx.getString(R.string.feedback_email_message));
            if (!Utils.isIntentAvailable(ctx, i)) {
                Toast.makeText(ctx, R.string.no_app_handling_email_available, Toast.LENGTH_LONG).show();
            } else {
                ctx.startActivity(i);
            }
            break;
        case R.id.CONTRIB_INFO_COMMAND:
            CommonCommands.showContribInfoDialog((FragmentActivity) ctx, -1);
            return true;
        case R.id.WEB_COMMAND:
            i = new Intent(Intent.ACTION_VIEW);
            i.setData(Uri.parse(ctx.getString(R.string.website)));
            ctx.startActivity(i);
            return true;
        case R.id.HELP_COMMAND:
            i = new Intent(ctx, Help.class);
            i.putExtra(HelpDialogFragment.KEY_VARIANT,
                    tag != null ? (Enum<?>) tag : ((ProtectedFragmentActivity) ctx).helpVariant);
            //for result is needed since it allows us to inspect the calling activity
            ctx.startActivityForResult(i, 0);
            return true;
        case R.id.REQUEST_LICENCE_COMMAND:
            String androidId = Settings.Secure.getString(ctx.getContentResolver(), Settings.Secure.ANDROID_ID);
            i = new Intent(android.content.Intent.ACTION_SEND);
            i.setType("plain/text");
            i.putExtra(android.content.Intent.EXTRA_EMAIL, new String[] { MyApplication.FEEDBACK_EMAIL });
            i.putExtra(android.content.Intent.EXTRA_SUBJECT,
                    "[" + ctx.getString(R.string.app_name) + "] " + ctx.getString(R.string.contrib_key));
            String extraText = ctx.getString(R.string.request_licence_mail_head, androidId);
            if (tag != null) {
                extraText += " \n\n[" + ctx.getString(R.string.paypal_transaction_id) + ": " + tag + "]";
            }
            i.putExtra(android.content.Intent.EXTRA_TEXT, extraText);
            if (!Utils.isIntentAvailable(ctx, i)) {
                Toast.makeText(ctx, R.string.no_app_handling_email_available, Toast.LENGTH_LONG).show();
            } else {
                ctx.startActivity(i);
            }
            return true;
        case R.id.VERIFY_LICENCE_COMMAND:
            HashLicenceHandler licenceHandler = (HashLicenceHandler) MyApplication.getInstance()
                    .getLicenceHandler();
            LicenceHandler.LicenceStatus licenceStatus = licenceHandler.verifyLicenceKey();
            if (licenceStatus != null) {
                Toast.makeText(ctx,
                        Utils.concatResStrings(ctx, " ", R.string.licence_validation_success,
                                (licenceStatus == LicenceHandler.LicenceStatus.EXTENDED
                                        ? R.string.licence_validation_extended
                                        : R.string.licence_validation_premium)),
                        Toast.LENGTH_LONG).show();
            } else {
                Toast.makeText(ctx, R.string.licence_validation_failure, Toast.LENGTH_LONG).show();
            }
            licenceHandler.invalidate();
            return true;
        case android.R.id.home:
            ctx.setResult(FragmentActivity.RESULT_CANCELED);
            ctx.finish();
            return true;
        }
        return false;
    }

    public static void showContribDialog(Activity ctx, ContribFeature feature, Serializable tag) {
        Intent i = new Intent(ctx, ContribInfoDialogActivity.class);
        i.putExtra(ContribInfoDialogActivity.KEY_FEATURE, feature);
        i.putExtra(ContribInfoDialogActivity.KEY_TAG, tag);
        ctx.startActivityForResult(i, ProtectionDelegate.CONTRIB_REQUEST);
    }

    public static void showContribInfoDialog(FragmentActivity ctx, long sequenceCount) {
        Intent i = new Intent(ctx, ContribInfoDialogActivity.class);
        i.putExtra(ContribInfoDialogFragment.KEY_SEQUENCE_COUNT, sequenceCount);
        ctx.startActivityForResult(i, 0);
    }

    /**
     * retrieve information about the current version
     * @return concatenation of versionName, versionCode and buildTime
     * buildTime is automatically stored in property file during build process
     */
    public static String getVersionInfo(Activity ctx) {
        String version = "";
        String versionname = "";
        try {
            PackageInfo pi = ctx.getPackageManager().getPackageInfo(ctx.getPackageName(), 0);
            version = " (revision " + pi.versionCode + ") ";
            versionname = pi.versionName;
            //versiontime = ", " + R.string.installed + " " + sdf.format(new Date(pi.lastUpdateTime));
        } catch (Exception e) {
            Log.e(MyApplication.TAG, "Package info not found", e);
        }
        String buildDate = BuildConfig.BUILD_DATE;

        final String flavor = TextUtils.isEmpty(BuildConfig.FLAVOR) ? "" : " " + BuildConfig.FLAVOR;
        String installer = ctx.getPackageManager().getInstallerPackageName(ctx.getPackageName());
        installer = TextUtils.isEmpty(installer) ? "" : " " + installer;
        return versionname + version + buildDate + flavor + installer;
    }

    /**
     * @return version name
     */
    public static String getVersionName(Activity ctx) {
        String version = "";
        try {
            PackageInfo pi = ctx.getPackageManager().getPackageInfo(ctx.getPackageName(), 0);
            version = pi.versionName;
        } catch (Exception e) {
            Log.e("MyExpenses", "Package name not found", e);
        }
        return version;
    }

    /**
     * @return version number (versionCode)
     */
    public static int getVersionNumber(Activity ctx) {
        int version = -1;
        try {
            PackageInfo pi = ctx.getPackageManager().getPackageInfo(ctx.getPackageName(), 0);
            version = pi.versionCode;
        } catch (Exception e) {
            Log.e("MyExpenses", "Package name not found", e);
        }
        return version;
    }
}