private synchronized boolean configureInstance()

in sdk/appcenter/src/main/java/com/microsoft/appcenter/AppCenter.java [677:742]


    private synchronized boolean configureInstance(Application application, String secretString, final boolean configureFromApp) {

        /* Check parameters. */
        if (application == null) {
            AppCenterLog.error(LOG_TAG, "Application context may not be null.");
            return false;
        }

        /* Enable a default log level for debuggable applications. */
        if (!mLogLevelConfigured && (application.getApplicationInfo().flags & FLAG_DEBUGGABLE) == FLAG_DEBUGGABLE) {
            AppCenterLog.setLogLevel(Log.WARN);
        }

        /* Configure app secret and/or transmission target. */
        String previousAppSecret = mAppSecret;
        if (configureFromApp && !configureSecretString(secretString)) {
            return false;
        }

        /* Skip configuration of global states if already done. */
        if (mHandler != null) {

            /* If app started after library with an app secret, set app secret on channel now. */
            if (mAppSecret != null && !mAppSecret.equals(previousAppSecret)) {
                mHandler.post(new Runnable() {

                    @Override
                    public void run() {
                        mChannel.setAppSecret(mAppSecret);
                        applyStorageMaxSize();
                    }
                });
            }
            return true;
        }

        /* Store state. */
        mApplication = application;

        /* Start looper. */
        mHandlerThread = new HandlerThread("AppCenter.Looper");
        mHandlerThread.start();
        mHandler = new Handler(mHandlerThread.getLooper());
        mAppCenterHandler = new AppCenterHandler() {

            @Override
            public void post(@NonNull Runnable runnable, Runnable disabledRunnable) {
                handlerAppCenterOperation(runnable, disabledRunnable);
            }
        };
        mApplicationLifecycleListener = new ApplicationLifecycleListener(mHandler);
        mApplication.registerActivityLifecycleCallbacks(mApplicationLifecycleListener);

        /* The rest of initialization is done in background as we need storage. */
        mServices = new HashSet<>();
        mServicesStartedFromLibrary = new HashSet<>();
        mHandler.post(new Runnable() {

            @Override
            public void run() {
                finishConfiguration(configureFromApp);
            }
        });
        AppCenterLog.info(LOG_TAG, "App Center SDK configured successfully.");
        return true;
    }