package treehou.se.habit.ui.control.builders; import android.app.PendingIntent; import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.PorterDuff; import android.view.LayoutInflater; import android.view.View; import android.widget.ImageView; import android.widget.RemoteViews; import android.widget.SeekBar; import butterknife.BindView; import butterknife.ButterKnife; import io.realm.Realm; import se.treehou.ng.ohcommunicator.connector.models.OHServer; import se.treehou.ng.ohcommunicator.services.Connector; import se.treehou.ng.ohcommunicator.services.IServerHandler; import treehou.se.habit.R; import treehou.se.habit.core.db.model.controller.CellDB; import treehou.se.habit.core.db.model.controller.ControllerDB; import treehou.se.habit.core.db.model.controller.SliderCellDB; import treehou.se.habit.ui.util.ViewHelper; import treehou.se.habit.util.Util; import treehou.se.habit.ui.control.CellFactory; import treehou.se.habit.ui.control.ControllerUtil; import treehou.se.habit.ui.control.SliderActivity; public class SliderCellBuilder implements CellFactory.CellBuilder { private static final String TAG = "SliderCellBuilder"; @BindView(R.id.img_icon_button) ImageView imgIcon; @BindView(R.id.sbrNumber) SeekBar sbrNumber; @BindView(R.id.viw_background) View viwBackground; public View build(final Context context, ControllerDB controller, final CellDB cell){ LayoutInflater inflater = LayoutInflater.from(context); View cellView = inflater.inflate(R.layout.cell_slider, null); ButterKnife.bind(this, cellView); Realm realm = Realm.getDefaultInstance(); final SliderCellDB sliderCell = SliderCellDB.getCell(realm, cell); int[] pallete = ControllerUtil.generateColor(controller, cell); viwBackground.getBackground().setColorFilter(pallete[ControllerUtil.INDEX_BUTTON], PorterDuff.Mode.MULTIPLY); imgIcon.setImageDrawable(Util.getIconDrawable(context, sliderCell.getIcon())); sbrNumber.setMax(sliderCell.getMax()); sbrNumber.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { } @Override public void onStartTrackingTouch(SeekBar seekBar) { } @Override public void onStopTrackingTouch(SeekBar seekBar) { if(sliderCell.getItem() == null){ return; } OHServer server = sliderCell.getItem().getServer().toGeneric(); IServerHandler serverHandler = new Connector.ServerHandler(server, context); serverHandler.sendCommand(sliderCell.getItem().getName(), ""+seekBar.getProgress()); } }); realm.close(); return cellView; } @Override public RemoteViews buildRemote(final Context context, ControllerDB controller, CellDB cell) { Realm realm = Realm.getDefaultInstance(); final SliderCellDB numberCell = SliderCellDB.getCell(realm, cell); RemoteViews cellView = new RemoteViews(context.getPackageName(), R.layout.cell_button); int[] pallete = ControllerUtil.generateColor(controller, cell); ViewHelper.colorRemoteDrawable(cellView, R.id.img_icon_button, pallete[ControllerUtil.INDEX_BUTTON]); Bitmap icon = Util.getIconBitmap(context, numberCell.getIcon()); if(icon != null) { cellView.setImageViewBitmap(R.id.img_icon_button, icon); } Intent intent = new Intent(context.getApplicationContext(), SliderActivity.class); intent.setAction(SliderActivity.ACTION_NUMBER); intent.putExtra(SliderActivity.ARG_CELL, cell.getId()); intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS | Intent.FLAG_ACTIVITY_NO_ANIMATION ); //TODO give intent unique id PendingIntent pendingIntent = PendingIntent.getActivity(context, (int) (Math.random() * Integer.MAX_VALUE), intent, PendingIntent.FLAG_UPDATE_CURRENT); cellView.setOnClickPendingIntent(R.id.img_icon_button, pendingIntent); realm.close(); return cellView; } }