package com.airlocksoftware.hackernews.view;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.RelativeLayout;
import com.airlocksoftware.hackernews.R;
import com.airlocksoftware.hackernews.data.UserPrefs;
import com.airlocksoftware.hackernews.data.UserPrefs.Theme;
import com.airlocksoftware.hackernews.interfaces.RestartableActivity;
import com.airlocksoftware.holo.image.IconView;
import com.airlocksoftware.holo.type.FontFactory;
/**
* Light/Dark theme & text size chooser that's added to the overflow menu. If a setting is changed, the activity needs
* to restart.
**/
public class TextSettingsOverflow extends RelativeLayout {
Context mContext;
RestartableActivity mRestart;
UserPrefs mUserData;
IconView mDay;
IconView mNight;
IconView mBigger;
IconView mSmaller;
// CONSTANTS
private static final float MAX_SCALE_FACTOR = 1.375f;
private static final float MIN_SCALE_FACTOR = 0.75f;
private static final float SCALE_INCREMENT = 0.125f;
private static final int LAYOUT = R.layout.vw_overflow_textsettings;
private OnClickListener themeListener = new OnClickListener() {
@Override
public void onClick(View v) {
UserPrefs data = new UserPrefs(mContext);
if (v.getId() == R.id.icv_day_mode) data.setTheme(Theme.LIGHT);
else if (v.getId() == R.id.icv_night_mode) data.setTheme(Theme.DARK);
mRestart.restartActivity();
}
};
private OnClickListener textSizeListener = new OnClickListener() {
@Override
public void onClick(View v) {
float sf = FontFactory.getTextScaleFactor(mContext);
if (v.getId() == R.id.icv_text_bigger && sf < MAX_SCALE_FACTOR) {
FontFactory.saveTextScaleFactor(mContext, sf += SCALE_INCREMENT);
((RestartableActivity) mContext).restartActivity();
} else if (v.getId() == R.id.icv_text_smaller && sf > MIN_SCALE_FACTOR) {
FontFactory.saveTextScaleFactor(mContext, sf -= SCALE_INCREMENT);
mRestart.restartActivity();
}
}
};
public TextSettingsOverflow(Context context, RestartableActivity restart) {
super(context, null);
mContext = context;
mRestart = restart;
// inflate layout
LayoutInflater.from(mContext)
.inflate(LAYOUT, this);
// set layout params
LayoutParams params = new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);
setLayoutParams(params);
// setup text settings
mUserData = new UserPrefs(mContext);
mDay = (IconView) findViewById(R.id.icv_day_mode);
mNight = (IconView) findViewById(R.id.icv_night_mode);
mBigger = (IconView) findViewById(R.id.icv_text_bigger);
mSmaller = (IconView) findViewById(R.id.icv_text_smaller);
mDay.setOnClickListener(themeListener);
mNight.setOnClickListener(themeListener);
mBigger.setOnClickListener(textSizeListener);
mSmaller.setOnClickListener(textSizeListener);
}
public void refreshVisibility() {
float sf = FontFactory.getTextScaleFactor(mContext);
if (sf <= MIN_SCALE_FACTOR) {
mSmaller.setVisibility(View.GONE);
mBigger.setVisibility(View.VISIBLE);
} else if (sf >= MAX_SCALE_FACTOR) {
mSmaller.setVisibility(View.VISIBLE);
mBigger.setVisibility(View.GONE);
} else {
mSmaller.setVisibility(View.VISIBLE);
mBigger.setVisibility(View.VISIBLE);
}
if (mUserData.getTheme() == Theme.DARK) {
mNight.setVisibility(View.GONE);
mDay.setVisibility(View.VISIBLE);
} else if (mUserData.getTheme() == Theme.LIGHT) {
mNight.setVisibility(View.VISIBLE);
mDay.setVisibility(View.GONE);
}
}
}