package com.malmstein.yahnac.settings;
import android.app.Fragment;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.design.widget.Snackbar;
import android.view.View;
import com.google.android.gms.appinvite.AppInvite;
import com.google.android.gms.appinvite.AppInviteInvitation;
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.api.GoogleApiClient;
import com.malmstein.yahnac.BuildConfig;
import com.malmstein.yahnac.HNewsActivity;
import com.malmstein.yahnac.R;
import com.malmstein.yahnac.data.updater.LoginSharedPreferences;
import com.malmstein.yahnac.injection.Inject;
import com.novoda.notils.caster.Views;
/**
* A {@link android.preference.PreferenceActivity} that presents a set of application settings.
* <p/>
* See <a href="http://developer.android.com/design/patterns/settings.html">
* Android Design: Settings</a> for design guidelines and the <a
* href="http://developer.android.com/guide/topics/ui/settings.html">Settings
* API Guide</a> for more information on developing a Settings UI.
*/
public class SettingsActivity extends HNewsActivity implements SettingsFragment.Listener, LogoutConfirmDialogFragment.Listener, GoogleApiClient.OnConnectionFailedListener {
private static final int REQUEST_INVITE = 0;
private static final String LOGOUT_FRAGMENT_TAG = BuildConfig.APPLICATION_ID + ".LOGOUT_FRAGMENT_TAG";
private LoginSharedPreferences loginSharedPreferences;
private GoogleApiClient googleApiClient;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_settings);
setupSubActivityWithTitle();
loginSharedPreferences = LoginSharedPreferences.newInstance();
}
@Override
protected void onResume() {
super.onResume();
Inject.usageAnalytics().trackPage(getString(R.string.analytics_page_settings));
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_INVITE) {
if (resultCode == RESULT_OK) {
Inject.usageAnalytics().trackEvent(getString(R.string.analytics_event_app_invite_settings_complete));
}
}
}
@Override
public void onShowLogoutDialog() {
showLogoutConfirmationDialog();
}
@Override
public void onAppInviteRequested() {
setupGoogleClient();
showAppInviteMessage();
}
private void setupGoogleClient() {
googleApiClient = new GoogleApiClient.Builder(this)
.addApi(AppInvite.API)
.enableAutoManage(this, this)
.build();
}
private void showAppInviteMessage() {
Snackbar.make(Views.findById(this, R.id.content_root), R.string.app_invite, Snackbar.LENGTH_INDEFINITE)
.setAction(R.string.app_invite_action, new View.OnClickListener() {
@Override
public void onClick(View v) {
onInviteClicked();
}
}).show();
}
private void onInviteClicked() {
Inject.usageAnalytics().trackEvent(getString(R.string.analytics_event_app_invite_started));
Intent intent = new AppInviteInvitation.IntentBuilder(getString(R.string.invitation_title))
.setMessage(getString(R.string.invitation_message))
.setCustomImage(Uri.parse(getString(R.string.invitation_custom_image)))
.setCallToActionText(getString(R.string.invitation_cta))
.build();
startActivityForResult(intent, REQUEST_INVITE);
}
public void showLogoutConfirmationDialog() {
Fragment fragment = getFragmentManager().findFragmentByTag(LOGOUT_FRAGMENT_TAG);
if (fragment == null) {
LogoutConfirmDialogFragment.newInstance().show(getFragmentManager(), LOGOUT_FRAGMENT_TAG);
}
}
@Override
public void onLogoutConfirmed() {
loginSharedPreferences.logout();
navigate().toNews();
}
@Override
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
Snackbar.make(Views.findById(this, R.id.content_root), R.string.google_play_services_error, Snackbar.LENGTH_SHORT).show();
}
}