package it.angelic.soulissclient.model.typicals; import android.content.Context; import android.graphics.LinearGradient; import android.graphics.drawable.ClipDrawable; import android.graphics.drawable.ShapeDrawable; import android.graphics.drawable.shapes.RoundRectShape; import android.text.Html; import android.util.Log; import android.view.Gravity; import android.view.WindowManager; import android.widget.LinearLayout; import android.widget.ProgressBar; import android.widget.RelativeLayout; import android.widget.TextView; import java.util.Calendar; import it.angelic.soulissclient.Constants; import it.angelic.soulissclient.HalfFloatUtils; import it.angelic.soulissclient.R; import it.angelic.soulissclient.R.color; import it.angelic.soulissclient.SoulissApp; import it.angelic.soulissclient.helpers.SoulissPreferenceHelper; import it.angelic.soulissclient.model.ISoulissTypicalSensor; import it.angelic.soulissclient.model.SoulissTypical; /** * Occupa DUE slot, quindi l'output viene dal suo e dal suo fratello destro (66) * * @author Ale */ public class SoulissTypical53HumiditySensor extends SoulissTypical implements ISoulissTypicalSensor { /** * */ private static final long serialVersionUID = 3784476625375333669L; public SoulissTypical53HumiditySensor(Context ctx, SoulissPreferenceHelper opts) { super(ctx, opts); } @Override public Float getOutput() { return getOutputFloat(); } public float getOutputFloat() { int miofratello = getParentNode().getTypical((short) (typicalDTO.getSlot() + 1)).getTypicalDTO().getOutput(); //ora ho i due bytes, li converto int shifted = miofratello << 8; Log.d(Constants.TAG, "first:" + Long.toHexString((long) typicalDTO.getOutput()) + " second:" + Long.toHexString((long) miofratello) + "SENSOR Reading:" + Long.toHexString((long) shifted + typicalDTO.getOutput())); return HalfFloatUtils.toFloat(shifted + typicalDTO.getOutput()); } public String getTypedOutputValue() { return Constants.twoDecimalFormat.format(getOutputFloat()) + "%"; } @Override public String getOutputDesc() { if (Calendar.getInstance().getTime().getTime() - typicalDTO.getRefreshedAt().getTime().getTime() < (prefs.getDataServiceIntervalMsec() * 3)) return SoulissApp.getAppContext().getString(R.string.ok); else return SoulissApp.getAppContext().getString(R.string.stale); } @Override public void getActionsLayout(Context ctx, LinearLayout cont) { WindowManager mWinMgr = (WindowManager) ctx.getSystemService(Context.WINDOW_SERVICE); int displayWidth = mWinMgr.getDefaultDisplay().getWidth(); cont.removeAllViews(); final TextView cmd = new TextView(ctx); cmd.setText(Html.fromHtml("<b>Reading:</b> " + getTypedOutputValue())); if (prefs.isLightThemeSelected()) cmd.setTextColor(ctx.getResources().getColor(R.color.black)); RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.MATCH_PARENT); cmd.setLayoutParams(lp); lp.setMargins(2, 0, 0, 2); // cmd.setGravity(Gravity.TOP); cont.addView(cmd); ProgressBar par = new ProgressBar(ctx, null, android.R.attr.progressBarStyleHorizontal); // ProgressBar sfumata final ShapeDrawable pgDrawable = new ShapeDrawable(new RoundRectShape(Constants.roundedCorners, null, null)); final LinearGradient gradient = new LinearGradient(0, 0, displayWidth / 2, 0, ctx.getResources().getColor( color.aa_yellow), ctx.getResources().getColor(color.aa_blue), android.graphics.Shader.TileMode.CLAMP); pgDrawable.getPaint().setStrokeWidth(3); pgDrawable.getPaint().setDither(true); pgDrawable.getPaint().setShader(gradient); ClipDrawable progress = new ClipDrawable(pgDrawable, Gravity.LEFT, ClipDrawable.HORIZONTAL); par.setProgressDrawable(progress); par.setBackgroundResource(android.R.drawable.progress_horizontal); RelativeLayout.LayoutParams lp2 = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT); par.setLayoutParams(lp2); par.setProgress(20); par.setProgress(0); par.setMax(100); par.setProgress((int) getOutputFloat()); cont.addView(par); } }