com.gark.aircraftviewer.ui.LicenseActivity.java Source code

Java tutorial

Introduction

Here is the source code for com.gark.aircraftviewer.ui.LicenseActivity.java

Source

package com.gark.aircraftviewer.ui;

import com.google.android.vending.licensing.AESObfuscator;
import com.google.android.vending.licensing.LicenseChecker;
import com.google.android.vending.licensing.LicenseCheckerCallback;
import com.google.android.vending.licensing.Policy;
import com.google.android.vending.licensing.ServerManagedPolicy;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.provider.Settings.Secure;
import android.support.v4.app.FragmentActivity;
import android.view.View;
import android.view.Window;
import android.widget.Button;
import android.widget.TextView;

/**
 * Created by Artem on 25.12.13.
 */
public class LicenseActivity extends FragmentActivity {

    private static final String BASE64_PUBLIC_KEY = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAiP0BYh25lgYZdJJdncxY0e3ueFz58ScWHV0Oa/fki42qcXHd8ByCQFp3q4cDtMUlLBTrFApo/vh3yGRTyYPb1CF2D3Kx8bMevUi/QND3PmtHodKkljH9uTeAX0Gr+1C7CiO0pEPv4gMALDf814hIXgrEDntsLLac2UGtzTikmzIs8ANs5VSCdaWoccsI0zQhUwYbxh6enndF3FPUDbuD6UemeFfmPb1gc6/I7mOrNPTbP+IQyhHbq5f+2J90flFVYBSTqZkVApvq9oXIotLsT7sQeDCcuQGGV8saEqXUncTdZBQS6GoTl3AQqxpjwTzM5wqcxoCo85/84WGYOPINSwIDAQAB";

    // Generate your own 20 random bytes, and put them here.
    private static final byte[] SALT = new byte[] { -42, 69, 31, -128, -103, -37, 74, -64, 51, 88, -95, -45, 77,
            -117, -36, -103 - 11, 32, -64, 89 };

    //    private TextView mStatusText;
    //    private Button mCheckLicenseButton;

    private LicenseCheckerCallback mLicenseCheckerCallback;
    private LicenseChecker mChecker;
    // A handler on the UI thread.
    private Handler mHandler;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
        //        setContentView(R.layout.main);
        //
        //        mStatusText = (TextView) findViewById(R.id.status_text);
        //        mCheckLicenseButton = (Button) findViewById(R.id.check_license_button);
        //        mCheckLicenseButton.setOnClickListener(new View.OnClickListener() {
        //            public void onClick(View view) {
        //                doCheck();
        //            }
        //        });

        mHandler = new Handler();

        // Try to use more data here. ANDROID_ID is a single point of attack.
        String deviceId = Secure.getString(getContentResolver(), Secure.ANDROID_ID);

        // Library calls this when it's done.
        mLicenseCheckerCallback = new MyLicenseCheckerCallback();
        // Construct the LicenseChecker with a policy.
        mChecker = new LicenseChecker(this,
                new ServerManagedPolicy(this, new AESObfuscator(SALT, getPackageName(), deviceId)),
                BASE64_PUBLIC_KEY);
        doCheck();
    }

    //    protected Dialog onCreateDialog(int id) {
    //        final boolean bRetry = id == 1;
    //        return new AlertDialog.Builder(this)
    //                .setTitle(R.string.unlicensed_dialog_title)
    //                .setMessage(
    //                        bRetry ? R.string.unlicensed_dialog_retry_body
    //                                : R.string.unlicensed_dialog_body)
    //                .setPositiveButton(
    //                        bRetry ? R.string.retry_button : R.string.buy_button,
    //                        new DialogInterface.OnClickListener() {
    //                            boolean mRetry = bRetry;
    //
    //                            public void onClick(DialogInterface dialog,
    //                                                int which) {
    //                                if (mRetry) {
    //                                    doCheck();
    //                                } else {
    //                                    Intent marketIntent = new Intent(
    //                                            Intent.ACTION_VIEW,
    //                                            Uri.parse("http://market.android.com/details?id="
    //                                                    + getPackageName()));
    //                                    startActivity(marketIntent);
    //                                }
    //                            }
    //                        })
    //                .setNegativeButton(R.string.quit_button,
    //                        new DialogInterface.OnClickListener() {
    //                            public void onClick(DialogInterface dialog,
    //                                                int which) {
    //                                finish();
    //                            }
    //                        }).create();
    //    }

    private void doCheck() {
        //        mCheckLicenseButton.setEnabled(false);
        //        setProgressBarIndeterminateVisibility(true);
        //        mStatusText.setText(R.string.checking_license);
        mChecker.checkAccess(mLicenseCheckerCallback);
    }

    private void displayResult(final String result) {
        mHandler.post(new Runnable() {
            public void run() {
                //                mStatusText.setText(result);
                //                setProgressBarIndeterminateVisibility(false);
                //                mCheckLicenseButton.setEnabled(true);
            }
        });
    }

    private void displayDialog(final boolean showRetry) {
        mHandler.post(new Runnable() {
            public void run() {
                //                setProgressBarIndeterminateVisibility(false);
                //                showDialog(showRetry ? 1 : 0);
                //                mCheckLicenseButton.setEnabled(true);
            }
        });
    }

    private class MyLicenseCheckerCallback implements LicenseCheckerCallback {
        public void allow(int policyReason) {
            if (isFinishing()) {
                // Don't update UI if Activity is finishing.
                return;
            }
            // Should allow user access.
            //            displayResult(getString(R.string.allow));
        }

        public void dontAllow(int policyReason) {
            if (isFinishing()) {
                // Don't update UI if Activity is finishing.
                return;
            }
            //            displayResult(getString(R.string.dont_allow));
            // Should not allow access. In most cases, the app should assume
            // the user has access unless it encounters this. If it does,
            // the app should inform the user of their unlicensed ways
            // and then either shut down the app or limit the user to a
            // restricted set of features.
            // In this example, we show a dialog that takes the user to Market.
            // If the reason for the lack of license is that the service is
            // unavailable or there is another problem, we display a
            // retry button on the dialog and a different message.
            displayDialog(policyReason == Policy.RETRY);
        }

        public void applicationError(int errorCode) {
            if (isFinishing()) {
                // Don't update UI if Activity is finishing.
                return;
            }
            // This is a polite way of saying the developer made a mistake
            // while setting up or calling the license checker library.
            // Please examine the error code and fix the error.
            //            String result = String.format(
            //                    getString(R.string.application_error), errorCode);
            //            displayResult(result);
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        mChecker.onDestroy();
    }

}