com.andrasta.dashi.SplashActivity.java Source code

Java tutorial

Introduction

Here is the source code for com.andrasta.dashi.SplashActivity.java

Source

package com.andrasta.dashi;

import android.Manifest;
import android.app.Activity;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.res.AssetManager;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat.OnRequestPermissionsResultCallback;
import android.util.Log;

import com.andrasta.dashi.service.LicensePlateMatcher;
import com.andrasta.dashi.utils.FileUtils;
import com.andrasta.dashi.utils.PermissionsHelper;
import com.andrasta.dashi.utils.SharedPreferencesHelper;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;

import static com.andrasta.dashi.utils.SharedPreferencesHelper.KEY_ALPR_CONFIG_COPIED;
import static com.andrasta.dashi.utils.SharedPreferencesHelper.KEY_ALPR_CONFIG_DIR;
import static com.andrasta.dashi.utils.SharedPreferencesHelper.KEY_APP_INITIALIZED;

public class SplashActivity extends Activity implements OnRequestPermissionsResultCallback {
    private static final String TAG = "SplashActivity";

    private SharedPreferencesHelper prefs;
    private int requestId;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_splash);

        prefs = new SharedPreferencesHelper(getApplicationContext());
        if (checkPermissions()) {
            onAllPermissionsGranted();
        } else {
            Log.d(TAG, "Request permissions");
        }
    }

    private void onAllPermissionsGranted() {
        Log.d(TAG, "All permissions granted");

        if (prefs.getBoolean(KEY_APP_INITIALIZED, false)) {
            Log.d(TAG, "App initialized already");
            startMainActivity();
            return;
        }

        Log.d(TAG, "App isn't initialized. Start initialization.");
        LicensePlateMatcher.getInstance(prefs).initialize();

        File configDir = getFilesDir();
        prefs.setString(KEY_ALPR_CONFIG_DIR, configDir.getAbsolutePath());
        new AlprConfigCopierTask(this, configDir, prefs).execute();
    }

    private void startMainActivity() {
        Log.d(TAG, "Start main activity");
        prefs.setBoolean(KEY_APP_INITIALIZED, true);
        startActivity(new Intent(this, MainActivity.class));
        finish();
    }

    private boolean checkPermissions() {
        if (!PermissionsHelper.hasPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)) {
            requestId = PermissionsHelper.requestPermission(this, Manifest.permission.ACCESS_FINE_LOCATION,
                    R.string.location_permission_rationale);
            return false;
        }
        if (!PermissionsHelper.hasPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION)) {
            requestId = PermissionsHelper.requestPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION,
                    R.string.location_permission_rationale);
            return false;
        }
        if (!PermissionsHelper.hasPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
            requestId = PermissionsHelper.requestPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE,
                    R.string.storage_permission_rationale);
            return false;
        }
        if (!PermissionsHelper.hasPermission(this, Manifest.permission.CAMERA)) {
            requestId = PermissionsHelper.requestPermission(this, Manifest.permission.CAMERA,
                    R.string.camera_permission_rationale);
            return false;
        }
        return true;
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
            @NonNull int[] grantResults) {
        if (requestCode == requestId) {
            if (!checkPermissions()) {
                return;
            }

            if (grantResults.length != 1 || grantResults[0] != PackageManager.PERMISSION_GRANTED) {
                MainActivity.ExitDialog.newInstance(getString(R.string.permission_discard))
                        .show(getFragmentManager(), "Dialog");
            } else {
                onAllPermissionsGranted();
            }
        } else {
            super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        }
    }

    private static final class AlprConfigCopierTask extends AsyncTask<Void, Void, Void> {
        private static final String CONFIG_ZIP_FILE_NAME = "alpr_config.zip";
        private final AssetManager assetManager;
        private final File configDir;
        private final SharedPreferencesHelper prefs;
        private SplashActivity activity;

        AlprConfigCopierTask(@NonNull SplashActivity activity, @NonNull File configDir,
                @NonNull SharedPreferencesHelper prefs) {
            this.assetManager = activity.getAssets();
            this.activity = activity;
            this.configDir = configDir;
            this.prefs = prefs;
        }

        @Override
        protected Void doInBackground(Void... params) {

            if (!prefs.getBoolean(KEY_ALPR_CONFIG_COPIED, false)) {

                try {
                    InputStream open = assetManager.open(CONFIG_ZIP_FILE_NAME);
                    File file = new File(configDir, CONFIG_ZIP_FILE_NAME);
                    FileOutputStream fileOutputStream = new FileOutputStream(file);

                    FileUtils.copyFile(open, fileOutputStream);

                    FileUtils.unzip(file.getAbsolutePath(), file.getParentFile().getAbsolutePath());

                    //noinspection ResultOfMethodCallIgnored
                    file.delete();

                    prefs.setBoolean(KEY_ALPR_CONFIG_COPIED, true);

                } catch (IOException e) {
                    Log.e(TAG, "Error copying alpr config", e);
                }
            }

            return null;
        }

        @Override
        protected void onPostExecute(Void aVoid) {
            if (activity != null) {
                Log.d(TAG, "Alpr config copied");
                activity.startMainActivity();
            }
        }
    }
}