com.kkbox.toolkit.app.KKActivityDelegate.java Source code

Java tutorial

Introduction

Here is the source code for com.kkbox.toolkit.app.KKActivityDelegate.java

Source

/* Copyright (C) 2014 KKBOX Inc.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.kkbox.toolkit.app;

import android.app.ProgressDialog;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;

import com.kkbox.toolkit.KKService;
import com.kkbox.toolkit.KKServiceListener;
import com.kkbox.toolkit.R;
import com.kkbox.toolkit.dialog.KKServiceDialog;
import com.kkbox.toolkit.internal.dialog.KKDialogManagerListener;

import java.util.ArrayList;

public class KKActivityDelegate {
    private static final ArrayList<FragmentActivity> activityList = new ArrayList<FragmentActivity>();
    private final ArrayList<KKFragment> activeSubFragments = new ArrayList<KKFragment>();

    private ProgressDialog serviceLoadingDialog;
    private KKServiceDialog currentDialogFragment;
    private Intent nextActivityIntent = null;
    private int nextActivityRequestCode = -1;
    private boolean finishActivityAfterShowingNotification = false;
    private FragmentActivity activity;

    private final KKDialogManagerListener dialogNotificationListener = new KKDialogManagerListener() {
        @Override
        public void onAllNotificationEnded() {
            if (nextActivityIntent != null) {
                activity.startActivityForResult(nextActivityIntent, nextActivityRequestCode);
                nextActivityIntent = null;
                nextActivityRequestCode = -1;
            }
            if (finishActivityAfterShowingNotification) {
                activity.finish();
                finishActivityAfterShowingNotification = false;
            }
        }

        @Override
        public synchronized void onCancelNotification() {
            if (currentDialogFragment != null) {
                currentDialogFragment.dismiss();
            }
            activity.getSupportFragmentManager().executePendingTransactions();
        }

        @Override
        public synchronized void onNotification(final KKServiceDialog dialog) {
            currentDialogFragment = dialog;
            currentDialogFragment.show(activity.getSupportFragmentManager(), "alertDialog");
        }
    };

    private final KKServiceListener serviceListener = new KKServiceListener() {
        @Override
        public void onRunning(int flag) {
            if (serviceLoadingDialog != null && serviceLoadingDialog.isShowing()) {
                serviceLoadingDialog.dismiss();
            }
            ((KKServiceActivity) activity).onServiceStarted(flag);
            KKService.getDialogNotificationManager().setListener(dialogNotificationListener);
        }

        @Override
        public void onProgress(int flag) {
            ((KKServiceActivity) activity).onServiceStarting(flag);
        }
    };

    public KKActivityDelegate(FragmentActivity activity) {
        this.activity = activity;
    }

    public void startActivityIfNoDialog(Intent intent) {
        if (KKService.getDialogNotificationManager() == null
                || !KKService.getDialogNotificationManager().isDialogOnShown()) {
            activity.startActivity(intent);
        } else {
            nextActivityIntent = intent;
            nextActivityRequestCode = -1;
        }
    }

    public void finishIfNoDialog() {
        if (KKService.getDialogNotificationManager() == null
                || !KKService.getDialogNotificationManager().isDialogOnShown()) {
            activity.finish();
        } else {
            finishActivityAfterShowingNotification = true;
        }
    }

    public void startActivityForResultIfNoDialog(Intent intent, int requestCode) {
        if (KKService.getDialogNotificationManager() == null
                || !KKService.getDialogNotificationManager().isDialogOnShown()) {
            activity.startActivityForResult(intent, requestCode);
        } else {
            nextActivityIntent = intent;
            nextActivityRequestCode = requestCode;
        }
    }

    public void onCreate(Bundle savedInstanceState) {
        activityList.add(activity);
    }

    public void onPostResume() {
        if (!KKService.isRunning()) {
            serviceLoadingDialog = new ProgressDialog(activity);
            serviceLoadingDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
            serviceLoadingDialog.setMessage(activity.getString(R.string.loading));
            serviceLoadingDialog.setIndeterminate(true);
            serviceLoadingDialog.setCanceledOnTouchOutside(false);
            serviceLoadingDialog.setCancelable(false);
            serviceLoadingDialog.show();
        }
        KKService.attachListener(serviceListener);
    }

    public void onPause() {
        if (serviceLoadingDialog != null && serviceLoadingDialog.isShowing()) {
            serviceLoadingDialog.dismiss();
        }
        KKService.detachListener(serviceListener);
        if (KKService.isRunning()) {
            KKService.getDialogNotificationManager().removeListener();
        }
    }

    public void onDestroy() {
        activityList.remove(activity);
    }

    public void sendMessageToActiveSubFragments(Bundle arguments) {
        for (int i = 0; i < activeSubFragments.size(); i++) {
            activeSubFragments.get(i).onReceiveMessage(arguments);
        }
    }

    public void finishAllKKActivity() {
        for (FragmentActivity activity : activityList) {
            activity.finish();
        }
        activityList.clear();
    }

    public void activateSubFragment(KKFragment fragment) {
        activeSubFragments.add(fragment);
    }

    public void deactivateSubFragment(KKFragment fragment) {
        activeSubFragments.remove(fragment);
    }

    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        KKFragment.callbackActivityResult(requestCode, resultCode, data);
    }
}