h-oikawa
12/31/2015 - 5:11 AM

AbstractActivity.java

package com.techfun.avexliveandroid.ui;

import android.content.Context;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.WindowManager;
import android.widget.Toast;

import com.techfun.avexliveandroid.AvexLiveSitePosApp;
import com.techfun.avexliveandroid.BuildConfig;
import com.techfun.avexliveandroid.api.APIClient;
import com.techfun.avexliveandroid.exception.ApplicationException;
import com.techfun.avexliveandroid.exception.UncaughtExceptionHandler;
import com.techfun.avexliveandroid.model.Course;
import com.techfun.avexliveandroid.model.FanClub;
import com.techfun.avexliveandroid.model.Venue;
import com.techfun.avexliveandroid.ui.fragment.dialog.SimpleProgressDialog;
import com.techfun.avexliveandroid.util.AppLog;
import com.techfun.avexliveandroid.util.StringUtil;

import org.androidannotations.annotations.AfterInject;
import org.androidannotations.annotations.App;
import org.androidannotations.annotations.Bean;
import org.androidannotations.annotations.EActivity;
import org.androidannotations.annotations.Extra;
import org.androidannotations.annotations.HierarchyViewerSupport;
import org.androidannotations.annotations.InstanceState;
import org.androidannotations.annotations.Trace;
import org.androidannotations.annotations.UiThread;

import de.greenrobot.event.EventBus;
import lombok.Setter;
import lombok.ToString;

/**
 * Created by wohi on 2015/12/06.
 */
//@HierarchyViewerSupport
@EActivity
@ToString
public abstract class AbstractActivity extends AppCompatActivity {
    private static final String TAG = AbstractActivity.class.getSimpleName();

    @App
    protected AvexLiveSitePosApp application;
//
//    @SystemService
//    FragmentManager fragmentManager;

    @Bean
    protected APIClient apiClient;

    @Extra
    @InstanceState
    protected Venue venue;
    @Extra
    @InstanceState
    protected FanClub fanClub;
    @Extra
    @InstanceState
    protected Course course;

    @AfterInject
    @Trace
    protected void afterInject() {
        debugPrint("#afterInject", this);
    }

    @Override
    @Trace
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        debugPrint("#onCreate", this);

        if (StringUtil.isEmpty(application.appAuthToken())) {
            application.initialize();
        }
    }

    @Override
    @Trace
    protected void onStart() {
        super.onStart();
        debugPrint("#onStart", this);
        getEventBus().registerSticky(this);
    }

    @Override
    @Trace
    protected void onStop() {
        debugPrint("#onStop", this);
        getEventBus().unregister(this);
        super.onStop();
    }

    @Override
    @Trace
    protected void onRestart() {
        super.onRestart();
        debugPrint("#onRestart", this);

        if (StringUtil.isEmpty(application.appAuthToken())) {
            application.initialize();
        }
//        if (venue == null) // TODO: 2015/12/29 TOPへ戻る
    }

    @Override
    @Trace
    protected void onDestroy() {
        debugPrint("#onDestroy", this);
        super.onDestroy();
    }

    ///////////////////////////////////////////////////////////////////////////////////////////

    protected EventBus getEventBus() {
        return application.eventBus();
    }

    /**
     * プログレスダイアログ表示.
     * @param message
     */
    @UiThread
    protected void showProgressDialog(String message) {
        if (getFragmentManager().findFragmentByTag(SimpleProgressDialog.class.getName()) != null) {
            return;
        }

        Bundle bundle = new Bundle();
        bundle.putString("message", message);
        SimpleProgressDialog simpleProgressDialog = SimpleProgressDialog.newInstance(bundle);
        simpleProgressDialog.show(getFragmentManager(), SimpleProgressDialog.class.getName());
    }

    /**
     * APIプログレスダイアログ表示.
     */
    @UiThread
    protected void showApiProgressDialog() {
//        showProgressDialog(getString(R.string.during_communication)); TODO
        showProgressDialog("通信中");
    }

    /**
     * プログレスダイアログ非表示.
     */
    @UiThread(delay = 100)
    protected void closeProgressDialog() {
        SimpleProgressDialog simpleProgressDialog =
                (SimpleProgressDialog) getFragmentManager()
                        .findFragmentByTag(SimpleProgressDialog.class.getName());
        if (simpleProgressDialog != null) {
            simpleProgressDialog.dismissAllowingStateLoss();
        }
    }

    ///////////////////////////////////////////////////////////////////////////////////////////

    // Error Handler
    public void onEvent(ApplicationException exception) {
        //TODO Log
        closeProgressDialog();
        publishExceptionMsg(exception);
    }

    @UiThread
    protected void publishExceptionMsg(ApplicationException exception) {
        Log.e(TAG, exception.getMessage(), exception);
        Toast.makeText(getApplicationContext(), exception.getAppMessageId(), Toast.LENGTH_SHORT).show();
    }

    @UiThread
    protected void publishStringMsg(String msg) {
        Toast.makeText(getApplicationContext(), msg, Toast.LENGTH_SHORT).show();
    }

    @UiThread
    protected void hideScreenKeyboardInPageDisplay() {
        getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
    }

//    @UiThread(delay = 2000)
//    protected void showSnackBar(String Message) {
//        final View coordinatorLayoutView = findViewById(R.id.snackbarPosition);
//        Snackbar.make(coordinatorLayoutView, Message, Snackbar.LENGTH_LONG)
//                .setAction("OK", new View.OnClickListener() {
//                    @Override
//                    public void onClick(View v) {
//                        mSettingDialog.show();
//                    }
//                })
//                .show();
//    }

    ///////////////////////////////////////////////////////////////////////////////////////////

    protected void debugPrint(String msg, Context context) {
        if (BuildConfig.DEBUG) {
            Log.d(TAG, String.valueOf(msg));
            Log.d(TAG, String.valueOf(" > " + context.getClass()));
            Log.d(TAG, String.valueOf(" > " + context));
        }
    }

}