Created
November 18, 2014 10:29
-
-
Save edBaev/caf5f522b27d42150d6e to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.blacksquared.changers.activity; | |
import java.util.Locale; | |
import android.annotation.TargetApi; | |
import android.app.ActionBar; | |
import android.app.Activity; | |
import android.app.Dialog; | |
import android.app.ProgressDialog; | |
import android.content.Intent; | |
import android.content.pm.PackageInfo; | |
import android.content.pm.PackageManager; | |
import android.graphics.Color; | |
import android.graphics.drawable.ColorDrawable; | |
import android.os.Build; | |
import android.os.Bundle; | |
import android.os.Handler; | |
import android.os.Message; | |
import android.support.v4.app.Fragment; | |
import android.support.v4.app.FragmentActivity; | |
import android.support.v4.app.FragmentManager; | |
import android.support.v4.app.FragmentTransaction; | |
import android.text.Spannable; | |
import android.text.SpannableString; | |
import android.util.TypedValue; | |
import android.view.Window; | |
import android.view.WindowManager; | |
import android.widget.Toast; | |
import com.blacksquared.changers.App; | |
import com.blacksquared.changers.Constants; | |
import com.blacksquared.changers.R; | |
import com.blacksquared.changers.activity.auth.AuthActivity; | |
import com.blacksquared.changers.event.error.ErrorApiEvent; | |
import com.blacksquared.changers.event.auth.LogOutApiEvent; | |
import com.blacksquared.changers.event.track.TrackEvent; | |
import com.blacksquared.changers.interfaces.IChangeTitle; | |
import com.blacksquared.changers.interfaces.OnControlActionBarAttr; | |
import com.blacksquared.changers.service.LocationService; | |
import com.blacksquared.changers.utils.CustomTypeFace; | |
import com.blacksquared.changers.utils.Logger; | |
import com.blacksquared.changers.utils.Toaster; | |
import com.bugsense.trace.BugSenseHandler; | |
import com.google.android.gms.common.ConnectionResult; | |
import com.google.android.gms.common.ErrorDialogFragment; | |
import com.google.android.gms.common.GooglePlayServicesUtil; | |
import com.readystatesoftware.systembartint.SystemBarTintManager; | |
import de.greenrobot.event.EventBus; | |
public class BaseActivity extends FragmentActivity implements OnControlActionBarAttr, IChangeTitle { | |
protected ActionBar actionBar; | |
protected FragmentManager fragmentManager; | |
private ProgressDialog progressDialog; | |
private SystemBarTintManager tintManager; | |
protected int statusBarHeight; | |
protected int actionBarHeight; | |
protected String title; | |
private boolean isLogOuting; | |
protected Handler handler; | |
@Override | |
protected void onCreate(Bundle savedInstanceState) { | |
super.onCreate(savedInstanceState); | |
BugSenseHandler.initAndStartSession(this, "f8072d6a"); | |
actionBar = getActionBar(); | |
if (actionBar != null) { | |
actionBar.setDisplayShowCustomEnabled(true); | |
actionBar.setDisplayHomeAsUpEnabled(true); | |
actionBar.setHomeButtonEnabled(true); | |
} | |
fragmentManager = getSupportFragmentManager(); | |
progressDialog = new ProgressDialog(App.getAppContext()); | |
progressDialog.setTitle(null); | |
progressDialog.setMessage(getString(R.string.progressDialog_message_pleaseWait)); | |
setStatusBarColor(); | |
setActionBarColor(R.color.action_bar_color); | |
handler = new Handler(new Handler.Callback() { | |
@Override | |
public boolean handleMessage(Message msg) { | |
return BaseActivity.this.handleMessage(msg); | |
} | |
}); | |
} | |
protected boolean handleMessage(Message msg) { | |
return false; | |
} | |
public void removeStickyEvent(final Class<?> eventType) { | |
handler.postDelayed(new Runnable() { | |
@Override | |
public void run() { | |
EventBus.getDefault().removeStickyEvent(eventType); | |
} | |
}, 100); | |
} | |
public void removeStickyEvent(final Object event) { | |
handler.postDelayed(new Runnable() { | |
@Override | |
public void run() { | |
EventBus.getDefault().removeStickyEvent(event); | |
} | |
}, 100); | |
} | |
protected void setActionBarTitle(String title) { | |
this.title = title; | |
restoreActionBar(); | |
} | |
protected void sendFeedback() { | |
Intent email = new Intent(Intent.ACTION_SEND); | |
email.setType("text/email"); | |
email.putExtra(Intent.EXTRA_EMAIL, new String[] { Constants.FEEDBACK_EMAIL }); | |
email.putExtra(Intent.EXTRA_SUBJECT, getString(R.string.feedback_subject, getVersionName())); | |
email.putExtra(Intent.EXTRA_TEXT, getTextForFeedback()); | |
startActivity(Intent.createChooser(email, getResources().getString(R.string.send_feedback))); | |
} | |
private String getTextForFeedback() { | |
String text = getString(R.string.feedback_body, Build.MODEL, Build.DEVICE, Build.VERSION.RELEASE, Locale | |
.getDefault() | |
.getDisplayLanguage()); | |
return text; | |
} | |
protected void sendFile(String json) { | |
Intent email = new Intent(Intent.ACTION_SEND); | |
email.setType("text/email"); | |
email.putExtra(Intent.EXTRA_EMAIL, new String[] { "edbaev@gmail.com" }); | |
email.putExtra(Intent.EXTRA_TEXT, | |
"" + json); | |
startActivity(Intent.createChooser(email, getResources().getString(R.string.send_feedback))); | |
} | |
private String getVersionName() { | |
PackageInfo pInfo; | |
try { | |
pInfo = getPackageManager().getPackageInfo(getPackageName(), 0); | |
return pInfo.versionName; | |
} catch (PackageManager.NameNotFoundException e) { | |
return ""; | |
} | |
} | |
protected void logout() { | |
if (!isLogOuting) { | |
isLogOuting = true; | |
App.apiManager.clear(); | |
App.dataManager.logout(); | |
stopService(new Intent(this, LocationService.class)); | |
EventBus.getDefault().postSticky(new TrackEvent(TrackEvent.TrackEventType.StopRecord)); | |
startActivity(new Intent(this, AuthActivity.class)); | |
finish(); | |
} | |
} | |
@Override | |
protected void onDestroy() { | |
super.onDestroy(); | |
BugSenseHandler.closeSession(this); | |
} | |
@Override | |
public void onStart() { | |
super.onStart(); | |
BugSenseHandler.startSession(this); | |
} | |
protected void restoreActionBar() { | |
if (title != null && actionBar != null) { | |
SpannableString s = new SpannableString(title); | |
s.setSpan(new CustomTypeFace(this), 0, s.length(), | |
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); | |
actionBar.setTitle(s); | |
} | |
} | |
@Override | |
public void setContentView(int layoutId) { | |
super.setContentView(layoutId); | |
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { | |
TypedValue tv = new TypedValue(); | |
if (getTheme().resolveAttribute(android.R.attr.actionBarSize, tv, true)) { | |
actionBarHeight = TypedValue.complexToDimensionPixelSize(tv.data, getResources().getDisplayMetrics()); | |
} | |
if (getTheme().resolveAttribute(android.R.attr.windowTitleSize, tv, true)) { | |
statusBarHeight = TypedValue.complexToDimensionPixelSize(tv.data, getResources().getDisplayMetrics()); | |
} | |
App.PADDING_TOP_STATUS_BAR = statusBarHeight; | |
App.PADDING_TOP_STATUS_ACTION_BAR = actionBarHeight + statusBarHeight; | |
setPaddingToActionBar(); | |
} | |
App.PADDING_BOTTOM_NAVIGATION_BAR = tintManager.getConfig().getPixelInsetBottom(); | |
} | |
private void setStatusBarColor() { | |
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { | |
setTranslucentStatus(true); | |
} | |
tintManager = new SystemBarTintManager(this);// works on 19 API level or higher | |
tintManager.setStatusBarTintEnabled(true); | |
} | |
@TargetApi(19) | |
private void setTranslucentStatus(boolean on) { | |
Window win = getWindow(); | |
WindowManager.LayoutParams winParams = win.getAttributes(); | |
final int bits = WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS; | |
if (on) { | |
winParams.flags |= bits; | |
} else { | |
winParams.flags &= ~bits; | |
} | |
win.setAttributes(winParams); | |
} | |
/** | |
* @param colorResourceId | |
*/ | |
protected void setActionBarColor(int colorResourceId) { | |
if (actionBar != null) { | |
actionBar.setBackgroundDrawable(new ColorDrawable(getResources().getColor(colorResourceId))); | |
} | |
setStatusbarColor(getResources().getColor(colorResourceId)); | |
} | |
protected void setStatusbarColor(int color) { | |
try { | |
tintManager.setTintColor(color); | |
} catch (NullPointerException e) { | |
Logger.d("color=" + color); | |
} | |
} | |
@Override | |
protected void onResume() { | |
super.onResume(); | |
EventBus.getDefault().registerSticky(this); | |
} | |
protected void replaceFragment(Fragment fragment, boolean addToBackStack, int containerId) { | |
invalidateOptionsMenu(); | |
String backStateName = fragment.getClass().getName(); | |
boolean fragmentPopped = fragmentManager.popBackStackImmediate(backStateName, 0); | |
if (!fragmentPopped && fragmentManager.findFragmentByTag(backStateName) == null) { | |
FragmentTransaction transaction = fragmentManager.beginTransaction(); | |
transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE).replace(containerId, fragment, | |
backStateName); | |
if (addToBackStack) { | |
transaction.addToBackStack(backStateName); | |
} | |
transaction.commit(); | |
} | |
} | |
protected void showErrorToast(Activity activity, Throwable e) { | |
setProgressBarIndeterminateVisibility(false); | |
Toaster.showShort(activity, R.string.label_check_net_connection); | |
Logger.e(e); | |
} | |
protected void showErrorToast(Throwable e) { | |
setProgressBarIndeterminateVisibility(false); | |
Toaster.showShort(R.string.label_check_net_connection); | |
Logger.e(e); | |
} | |
@Override | |
protected void onPause() { | |
super.onPause(); | |
EventBus.getDefault().unregister(this); | |
} | |
public void onEvent(Constants.EventBusEvents event) { | |
} | |
public void onEvent(ErrorApiEvent errorApiEvent) { | |
EventBus.getDefault().removeStickyEvent(errorApiEvent); | |
if (errorApiEvent.displayToast) { | |
Toast.makeText(BaseActivity.this, errorApiEvent.message, Toast.LENGTH_SHORT).show(); | |
} | |
} | |
public void onEvent(LogOutApiEvent logOutApiEvent) { | |
EventBus.getDefault().removeStickyEvent(logOutApiEvent); | |
logout(); | |
} | |
protected void clearPaddingForRootView() { | |
findViewById(android.R.id.content) | |
.setPadding(0, 0, 0, 0); | |
setStatusbarColor(Color.TRANSPARENT); | |
} | |
protected void setPaddingToStatusBar() { | |
findViewById(android.R.id.content) | |
.setPadding(0, statusBarHeight, 0, 0); | |
} | |
protected void setPaddingToActionBar() { | |
findViewById(android.R.id.content) | |
.setPadding(0, actionBarHeight + statusBarHeight, 0, 0); | |
} | |
@Override | |
public void onPaddingToStatusBar() { | |
setPaddingToStatusBar(); | |
} | |
@Override | |
public void onPaddingToActionBar() { | |
setPaddingToActionBar(); | |
} | |
@Override | |
public void onSetABColorListener(int color) { | |
setActionBarColor(color); | |
} | |
@Override | |
public void onPaddingReset() { | |
clearPaddingForRootView(); | |
} | |
@Override | |
public void onPaddingNavigationBar() { | |
} | |
protected boolean isGooglePlayServicesAvailable() { | |
int resultCode = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this); | |
if (ConnectionResult.SUCCESS == resultCode) { | |
Logger.d("Google Play services is available."); | |
return true; | |
} else { | |
Dialog errorDialog = GooglePlayServicesUtil.getErrorDialog(resultCode, this, | |
Constants.Location.CONNECTION_FAILURE_RESOLUTION_REQUEST); | |
if (errorDialog != null) { | |
ErrorDialogFragment.newInstance(errorDialog).show(getFragmentManager(), "Location Updates"); | |
} | |
return false; | |
} | |
} | |
@Override | |
public void onChangeTitle(String title) { | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment