/*
* Copyright 2016 Substance Mobile
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.animbus.music.ui.activity.settings;
import android.app.PendingIntent;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.IntentSender;
import android.content.ServiceConnection;
import android.content.SharedPreferences;
import android.graphics.Color;
import android.net.Uri;
import android.os.Bundle;
import android.os.IBinder;
import android.os.RemoteException;
import android.preference.Preference;
import android.preference.PreferenceFragment;
import android.preference.PreferenceManager;
import android.support.annotation.ColorInt;
import android.support.annotation.NonNull;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Toast;
import com.afollestad.appthemeengine.ATE;
import com.afollestad.appthemeengine.Config;
import com.afollestad.appthemeengine.prefs.ATEColorPreference;
import com.afollestad.materialdialogs.DialogAction;
import com.afollestad.materialdialogs.MaterialDialog;
import com.afollestad.materialdialogs.color.ColorChooserDialog;
import com.android.vending.billing.IInAppBillingService;
import com.animbus.music.R;
import com.animbus.music.ui.custom.activity.ThemeActivity;
import com.animbus.music.util.Options;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.Objects;
public class Settings extends ThemeActivity implements ColorChooserDialog.ColorCallback {
@Override
protected int getLayout() {
return R.layout.activity_settings;
}
@Override
protected void setUp() {
getFragmentManager().beginTransaction().replace(R.id.prefs, new PrefsFragment()).commit();
}
@Override
protected int getOptionsMenu() {
return R.menu.menu_settings;
}
@Override
protected boolean processMenuItem(int id) {
switch (id) {
case R.id.action_reset:
Options.resetPrefs();
Options.restartApp();
return true;
}
return super.processMenuItem(id);
}
@Override
protected void onDestroy() {
if (mService != null) unbindService(mPlayConnection);
super.onDestroy();
}
///////////////////////////////////////////////////////////////////////////
// Settings
///////////////////////////////////////////////////////////////////////////
@Override
public void onColorSelection(@NonNull ColorChooserDialog colorChooserDialog, @ColorInt int i) {
if (!colorChooserDialog.isAccentMode())
ATE.config(this, getATEKey()).primaryColor(i).apply(this);
else
ATE.config(this, getATEKey()).accentColor(i).navigationViewSelectedIcon(i)
.navigationViewSelectedText(i).apply(this);
((PrefsFragment) getFragmentManager().findFragmentById(R.id.prefs)).configure();
recreate();
}
public static class PrefsFragment extends PreferenceFragment implements SharedPreferences.OnSharedPreferenceChangeListener {
public PrefsFragment() {
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
PreferenceManager.getDefaultSharedPreferences(getActivity()).registerOnSharedPreferenceChangeListener(this);
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
configure();
}
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
if (!key.equals("last_update_time")) Options.markChanged();
}
public void configure() {
findPreference("base_theme").setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
ATE.config(getActivity(), ((Settings) getActivity()).getATEKey())
.activityTheme(getStyleFromPos(Integer.parseInt((String) newValue))).commit();
Options.setLightTheme(Integer.parseInt((String) newValue) == 2);
getActivity().recreate();
return true;
}
});
final ATEColorPreference primaryColor = (ATEColorPreference) findPreference("primary");
final int primary = Config.primaryColor(getActivity(), ((Settings) getActivity()).getATEKey());
primaryColor.setColor(primary, Color.BLACK);
primaryColor.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
new ColorChooserDialog.Builder((Settings) getActivity(), R.string.settings_primary)
.accentMode(false)
.preselect(primary)
.allowUserColorInputAlpha(false)
.show();
return true;
}
});
ATEColorPreference accentColor = (ATEColorPreference) findPreference("accent");
final int accent = Config.accentColor(getActivity(), ((Settings) getActivity()).getATEKey());
accentColor.setColor(accent, Color.BLACK);
accentColor.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
new ColorChooserDialog.Builder((Settings) getActivity(), R.string.settings_accent)
.accentMode(true)
.preselect(accent)
.allowUserColorInputAlpha(false)
.show();
return true;
}
});
findPreference("reset_primary").setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
ATE.config(getActivity(), ((Settings) getActivity()).getATEKey())
.primaryColor(((Settings) getActivity()).resolveColorAttr(android.R.attr.colorBackground))
.commit();
getActivity().recreate();
return true;
}
});
findPreference("color_navbar").setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
ATE.config(getActivity(), ((Settings) getActivity()).getATEKey()).coloredNavigationBar((Boolean) newValue).apply(getActivity());
return true;
}
});
findPreference("donate").setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
((Settings) getActivity()).showDonation();
return true;
}
});
}
private int getStyleFromPos(int pos) {
switch (pos) {
case 0:
return R.style.AppTheme_Dark;
case 1:
return R.style.AppTheme_Faithful;
case 2:
return R.style.AppTheme_Light;
}
return 0;
}
}
///////////////////////////////////////////////////////////////////////////
// Donations
///////////////////////////////////////////////////////////////////////////
IInAppBillingService mService;
ServiceConnection mPlayConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
mService = IInAppBillingService.Stub.asInterface(service);
Log.d("Donations", "CONNECTED");
}
@Override
public void onServiceDisconnected(ComponentName name) {
mService = null;
Log.d("Donations", "DISCONNECTED");
}
};
public void showDonation() {
new MaterialDialog.Builder(this)
.title(R.string.settings_donate_disambiguation_title)
.items(getResources().getString(R.string.settings_donate_disambiguation_play),
getResources().getString(R.string.settings_donate_disambiguation_paypal))
.itemsCallback(new MaterialDialog.ListCallback() {
@Override
public void onSelection(MaterialDialog dialog, View itemView, int which, CharSequence text) {
switch (which) {
case 0:
/*Intent serviceIntent = new Intent("com.android.vending.billing.InAppBillingService.BIND").setPackage("com.android.vending");
Boolean isConnected = bindService(serviceIntent, mPlayConnection, Context.BIND_AUTO_CREATE);
Log.d("Donations", String.valueOf(isConnected));
induceDonatePrices(true);*/
Snackbar.make(mRoot, R.string.msg_coming_soon, Snackbar.LENGTH_SHORT).show();
break;
case 1:
donate(0, false);
break;
}
}
}).show();
}
private void induceDonatePrices(final Boolean useGooglePlay) {
new MaterialDialog.Builder(this).title(R.string.settings_donate_price_title)
.items(getResources().getString(R.string.settings_donate_price_1),
getResources().getString(R.string.settings_donate_price_5),
getResources().getString(R.string.settings_donate_price_10),
getResources().getString(R.string.settings_donate_price_25),
getResources().getString(R.string.settings_donate_price_50))
.itemsCallback(new MaterialDialog.ListCallback() {
@Override
public void onSelection(MaterialDialog dialog, View itemView, int which, CharSequence text) {
int amount = 0;
switch (which) {
case 0:
amount = 1;
break;
case 1:
amount = 5;
break;
case 2:
amount = 10;
break;
case 3:
amount = 25;
break;
case 4:
amount = 50;
break;
}
donate(amount, useGooglePlay);
}
}).show();
}
public void donate(int amount, boolean useGooglePlay) {
if (useGooglePlay) {
sendPlayBroadcast(amount);
} else {
new MaterialDialog.Builder(this).title(R.string.settings_donate_terms_popup_title)
.content(R.string.settings_donate_terms_popup_message)
.positiveText(android.R.string.yes).negativeText(android.R.string.no).onPositive(new MaterialDialog.SingleButtonCallback() {
@Override
public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {
startActivity(new Intent(Intent.ACTION_VIEW).setData(Uri.parse("https://plus.google.com/+AdrianVovkDev/posts/PUiDmRFzPLw")));
}
}).show();
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 3672) {
String purchaseData = data.getStringExtra("INAPP_PURCHASE_DATA");
if (resultCode == AppCompatActivity.RESULT_OK) {
try {
JSONObject jo = new JSONObject(purchaseData);
String sku = jo.getString("productId");
String token = jo.getString("purchaseToken");
Toast.makeText(this, sku, Toast.LENGTH_SHORT).show();
try {
mService.consumePurchase(3, "com.animbus.music", token);
} catch (RemoteException e) {
e.printStackTrace();
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}
}
private void sendPlayBroadcast(int amount) {
Bundle buyIntentBundle = null;
try {
buyIntentBundle = mService.getBuyIntent(3, "com.animbus.music", "donate_" + amount, "inapp", "bGoa+V7g/yqDXvKRqq+JTFn4uQZbPiQJo4pf9RzJ");
} catch (RemoteException e) {
e.printStackTrace();
Toast.makeText(this, "ERROR REMOTE", Toast.LENGTH_SHORT).show();
}
PendingIntent pendingIntent = buyIntentBundle.getParcelable("BUY_INTENT");
try {
Settings.this.startIntentSenderForResult(pendingIntent.getIntentSender(),
3672, new Intent(), 0, 0, 0);
} catch (IntentSender.SendIntentException e) {
e.printStackTrace();
Toast.makeText(this, "ERROR INTENT", Toast.LENGTH_SHORT).show();
}
}
}