package com.kuxhausen.huemore.persistence;
import com.google.gson.Gson;
import android.content.ContentValues;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.content.pm.PackageManager.NameNotFoundException;
import android.database.Cursor;
import android.support.v7.preference.PreferenceManager;
import android.provider.BaseColumns;
import com.kuxhausen.huemore.CommunityDialogFragment;
import com.kuxhausen.huemore.DisableDozeDialogFragment;
import com.kuxhausen.huemore.Helpers;
import com.kuxhausen.huemore.NetworkManagedActivity;
import com.kuxhausen.huemore.R;
import com.kuxhausen.huemore.net.NewConnectionFragment;
import com.kuxhausen.huemore.net.hue.HubData;
import com.kuxhausen.huemore.onboarding.WelcomeDialogFragment;
import com.kuxhausen.huemore.persistence.Definitions.DeprecatedPreferenceKeys;
import com.kuxhausen.huemore.persistence.Definitions.InternalArguments;
import com.kuxhausen.huemore.persistence.Definitions.NetBulbColumns;
import com.kuxhausen.huemore.persistence.Definitions.NetConnectionColumns;
import com.kuxhausen.huemore.persistence.Definitions.PreferenceKeys;
public class PreferenceInitializer {
public static void initializedPreferencesAndShowDialogs(NetworkManagedActivity act) {
SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(act);
Gson gson = new Gson();
if (settings.contains(DeprecatedPreferenceKeys.BRIDGE_IP_ADDRESS)) {
HubData hubData = new HubData();
hubData.localHubAddress =
settings.getString(DeprecatedPreferenceKeys.LOCAL_BRIDGE_IP_ADDRESS, null);
hubData.portForwardedAddress =
settings.getString(DeprecatedPreferenceKeys.INTERNET_BRIDGE_IP_ADDRESS, null);
hubData.hashedUsername = settings.getString(DeprecatedPreferenceKeys.HASHED_USERNAME, null);
if (hubData.localHubAddress == null) {
hubData.localHubAddress =
settings.getString(DeprecatedPreferenceKeys.BRIDGE_IP_ADDRESS, null);
}
if (hubData.hashedUsername != null
&& (hubData.localHubAddress != null || hubData.portForwardedAddress != null)) {
ContentValues connectionValues = new ContentValues();
connectionValues.put(Definitions.NetConnectionColumns.TYPE_COLUMN,
Definitions.NetBulbColumns.NetBulbType.PHILIPS_HUE);
connectionValues.put(Definitions.NetConnectionColumns.JSON_COLUMN,
gson.toJson(hubData));
long connectionId =
Long.parseLong(act.getContentResolver()
.insert(Definitions.NetConnectionColumns.URI,
connectionValues)
.getLastPathSegment());
// also update any migrated NetBulbs to point to this NetConnection
ContentValues bulbValues = new ContentValues();
bulbValues.put(NetBulbColumns.CONNECTION_DATABASE_ID, connectionId);
act.getContentResolver().update(NetBulbColumns.URI, bulbValues, null, null);
} else {
// remove any NetBulbs because there is no NetConnection
act.getContentResolver().delete(NetBulbColumns.URI, null, null);
}
Editor edit = settings.edit();
edit.remove(DeprecatedPreferenceKeys.LOCAL_BRIDGE_IP_ADDRESS);
edit.remove(DeprecatedPreferenceKeys.INTERNET_BRIDGE_IP_ADDRESS);
edit.remove(DeprecatedPreferenceKeys.BRIDGE_IP_ADDRESS);
edit.remove(DeprecatedPreferenceKeys.HASHED_USERNAME);
edit.commit();
}
if (!settings.contains(PreferenceKeys.FIRST_RUN)) {
// Mark no longer first run in preferences cache
Editor edit = settings.edit();
edit.putBoolean(PreferenceKeys.FIRST_RUN, false);
edit.commit();
} else if (settings.getInt(PreferenceKeys.VERSION_NUMBER, -1) < act.getResources().getInteger(
R.integer.major_update_version)) {
// TODO show any kind of update release notes, etc
}
if (!settings.contains(PreferenceKeys.DEFAULT_TO_GROUPS)) {
Editor edit = settings.edit();
edit.putBoolean(PreferenceKeys.DEFAULT_TO_GROUPS, true);
edit.commit();
}
if (!settings.contains(PreferenceKeys.DEFAULT_TO_MOODS)) {
Editor edit = settings.edit();
edit.putBoolean(PreferenceKeys.DEFAULT_TO_MOODS, true);
edit.commit();
}
DisableDozeDialogFragment.showDozeOptOutIfNeeded(act);
// check to see if the bridge IP address is setup yet
String[] columns = {BaseColumns._ID, NetConnectionColumns.TYPE_COLUMN};
Cursor cursor =
act.getContentResolver().query(NetConnectionColumns.URI, columns, null, null, null);
if (cursor.getCount() <= 0) {
if (!settings.contains(PreferenceKeys.DONE_WITH_WELCOME_DIALOG)) {
WelcomeDialogFragment wdf = new WelcomeDialogFragment();
wdf.show(act.getSupportFragmentManager(), InternalArguments.FRAG_MANAGER_DIALOG_TAG);
} else {
NewConnectionFragment dhdf = new NewConnectionFragment();
dhdf.show(act.getSupportFragmentManager(), InternalArguments.FRAG_MANAGER_DIALOG_TAG);
}
} else if (!settings.contains(PreferenceKeys.HAS_SHOWN_COMMUNITY_DIALOG)) {
CommunityDialogFragment cdf = new CommunityDialogFragment();
cdf.show(act.getSupportFragmentManager(), InternalArguments.FRAG_MANAGER_DIALOG_TAG);
}
cursor.close();
if (!settings.contains(PreferenceKeys.NUMBER_OF_CONNECTED_BULBS)) {
Editor edit = settings.edit();
edit.putInt(PreferenceKeys.NUMBER_OF_CONNECTED_BULBS, 1);
edit.commit();
}
Editor edit = settings.edit();
try {
edit.putInt(PreferenceKeys.VERSION_NUMBER,
act.getPackageManager().getPackageInfo(act.getPackageName(), 0).versionCode);
} catch (NameNotFoundException e) {
}
edit.commit();
// Performance optimization, don't re-run setDefaultValues on release builds
boolean reRunSetDefaultValues = Helpers.isDebugVersion();
PreferenceManager.setDefaultValues(act, R.xml.settings, reRunSetDefaultValues);
}
}