package com.markupartist.sthlmtraveling;
import android.Manifest;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.MenuItem;
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.location.LocationServices;
import com.google.android.gms.location.places.Places;
import com.markupartist.sthlmtraveling.utils.Analytics;
import com.markupartist.sthlmtraveling.utils.PlayService;
import com.markupartist.sthlmtraveling.utils.PlayServicesUtils;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
public class BaseFragmentActivity extends AppCompatActivity implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener {
public static final int PERMISSIONS_REQUEST_LOCATION = 100;
private Toolbar mActionBarToolbar;
private List<PlayService> mPlayServices;
private GoogleApiClient mGoogleApiClient;
public void registerPlayService(PlayService playService) {
if (mPlayServices == null) {
mPlayServices = new ArrayList<>();
}
mPlayServices.add(playService);
}
public synchronized void initGoogleApiClient(boolean checkIfAvailable) {
boolean looksGood = true;
if (checkIfAvailable) {
looksGood = PlayServicesUtils.checkGooglePlaySevices(this);
}
if (looksGood) {
mGoogleApiClient = new GoogleApiClient.Builder(this)
.addApi(LocationServices.API)
.addApi(Places.GEO_DATA_API)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.build();
}
}
public synchronized void initGoogleApiClient() {
initGoogleApiClient(true);
}
public GoogleApiClient getGoogleApiClient() {
return mGoogleApiClient;
}
@Override
protected void onStart() {
super.onStart();
if (mGoogleApiClient != null) {
mGoogleApiClient.connect();
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
protected void onStop() {
if (mGoogleApiClient != null) {
mGoogleApiClient.disconnect();
}
if (mPlayServices != null) {
for (PlayService ps : mPlayServices) {
ps.onStop();
}
}
super.onStop();
}
protected ActionBar initActionBar() {
ActionBar actionBar = getSupportActionBar();
actionBar.setHomeButtonEnabled(true);
actionBar.setDisplayShowHomeEnabled(true);
actionBar.setDisplayHomeAsUpEnabled(true);
return actionBar;
}
@Override
public void setSupportActionBar(final Toolbar toolbar) {
mActionBarToolbar = toolbar;
super.setSupportActionBar(toolbar);
}
public Toolbar getActionBarToolbar() {
return mActionBarToolbar;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
onBackPressed();
return true;
}
return super.onOptionsItemSelected(item);
}
protected void registerScreen(String event) {
Analytics.getInstance(this).registerScreen(event);
}
protected void registerEvent(String event, Map<String, String> parameters) {
}
@Override
public void startActivity(Intent intent) {
super.startActivity(intent);
overridePendingTransition(R.anim.slide_in_right, R.anim.slide_out_left);
}
@Override
public void onBackPressed() {
super.onBackPressed();
// Need to know if we are on the top level, then we should not apply this.
//overridePendingTransition(R.anim.slide_in_left, R.anim.slide_out_right);
}
protected boolean shouldShowAds(boolean isPromotionsActivated) {
if (getResources().getBoolean(R.bool.is_landscape)) {
return false;
}
if (AppConfig.shouldServeAds() && isPromotionsActivated) {
final SharedPreferences sharedPreferences = PreferenceManager
.getDefaultSharedPreferences(getApplicationContext());
boolean isDisabled = sharedPreferences.getBoolean("is_ads_disabled", false);
if (isDisabled) {
Log.d("BaseFragmentActivity", "Ads disabled by the user");
Analytics.getInstance(this).event("Ads", "Ad view disabled");
return false;
}
return true;
}
return false;
}
@Override
public void onConnected(Bundle bundle) {
if (mPlayServices != null) {
for (PlayService ps : mPlayServices) {
ps.onConnected();
}
}
}
@Override
public void onConnectionSuspended(int i) {
if (mGoogleApiClient != null) {
mGoogleApiClient.connect();
}
}
@Override
public void onConnectionFailed(ConnectionResult connectionResult) {
PlayServicesUtils.checkGooglePlaySevices(this);
}
public void verifyLocationPermission() {
int permissionCheck = ContextCompat.checkSelfPermission(
this, Manifest.permission.ACCESS_FINE_LOCATION);
if (permissionCheck != PackageManager.PERMISSION_GRANTED) {
if (ActivityCompat.shouldShowRequestPermissionRationale(this,
Manifest.permission.ACCESS_FINE_LOCATION)) {
onLocationPermissionRationale();
} else {
requestLocationPermission();
}
} else {
onLocationPermissionGranted();
}
}
public void requestLocationPermission() {
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
PERMISSIONS_REQUEST_LOCATION);
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String permissions[], @NonNull int[] grantResults) {
switch (requestCode) {
case PERMISSIONS_REQUEST_LOCATION: {
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// Permission granted.
onLocationPermissionGranted();
} else {
// Permission was denied.
if (!ActivityCompat.shouldShowRequestPermissionRationale(
this, Manifest.permission.READ_CONTACTS)) {
// If the user has selected don't show again
onLocationPermissionDontShowAgain();
}
}
}
break;
}
}
public void onLocationPermissionGranted() {
}
public void onLocationPermissionRationale() {
}
public void onLocationPermissionDontShowAgain() {
}
}