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));
}
}
}