simplify dependencies

This commit is contained in:
Milos Kozak 2020-01-05 20:20:11 +01:00
parent ec84c3fa70
commit e3766a229b
3 changed files with 49 additions and 48 deletions

View file

@ -20,51 +20,53 @@ import info.nightscout.androidaps.utils.resources.ResourceHelper;
public class TriggerListAdapter { public class TriggerListAdapter {
private final LinearLayout mRootLayout; private final LinearLayout mRootLayout;
private final Context mContext; private final Context mContext;
private final TriggerConnector mRootConnector; private final TriggerConnector rootTrigger;
private final MainApp mainApp; private final MainApp mainApp;
private final ResourceHelper resourceHelper; private final ResourceHelper resourceHelper;
public TriggerListAdapter(MainApp mainApp, ResourceHelper resourceHelper, Context context, LinearLayout rootLayout, TriggerConnector rootTrigger) { public TriggerListAdapter(MainApp mainApp, ResourceHelper resourceHelper, LinearLayout rootLayout, TriggerConnector rootTrigger) {
mRootLayout = rootLayout; mRootLayout = rootLayout;
this.mainApp = mainApp; this.mainApp = mainApp;
this.resourceHelper = resourceHelper; this.resourceHelper = resourceHelper;
mContext = context; mContext = rootLayout.getContext();
mRootConnector = rootTrigger; this.rootTrigger = rootTrigger;
build(rootTrigger.scanForActivity(context).getSupportFragmentManager()); build(rootLayout.getContext());
}
public Context getContext() {
return mContext;
} }
private void destroy() { private void destroy() {
mRootLayout.removeAllViews(); mRootLayout.removeAllViews();
} }
private void build(FragmentManager fragmentManager) { private void rebuild(Context context) {
for (int i = 0; i < mRootConnector.size(); ++i) { destroy();
final Trigger trigger = mRootConnector.get(i); build(context);
}
private void build(Context context) {
FragmentManager fragmentManager = Trigger.scanForActivity(context).getSupportFragmentManager();
for (int i = 0; i < rootTrigger.size(); ++i) {
final Trigger trigger = rootTrigger.get(i);
// spinner // spinner
if (i > 0) { if (i > 0) {
createSpinner(trigger, fragmentManager); createSpinner(trigger, context);
} }
// trigger layout // trigger layout
trigger.generateDialog(mRootLayout); trigger.generateDialog(mRootLayout);
// buttons // buttons
createButtons(fragmentManager, trigger); createButtons(mRootLayout, trigger, context);
} }
if (mRootConnector.size() == 0) { if (rootTrigger.size() == 0) {
Button buttonAdd = new Button(mContext); Button buttonAdd = new Button(mContext);
buttonAdd.setText(resourceHelper.gs(R.string.addnew)); buttonAdd.setText(resourceHelper.gs(R.string.addnew));
buttonAdd.setOnClickListener(v -> { buttonAdd.setOnClickListener(v -> {
ChooseTriggerDialog dialog = new ChooseTriggerDialog(); ChooseTriggerDialog dialog = new ChooseTriggerDialog();
dialog.setOnClickListener(newTriggerObject -> { dialog.setOnClickListener(newTriggerObject -> {
mRootConnector.add(newTriggerObject); rootTrigger.add(newTriggerObject);
rebuild(fragmentManager); rebuild(context);
}); });
dialog.show(fragmentManager, "ChooseTriggerDialog"); dialog.show(fragmentManager, "ChooseTriggerDialog");
}); });
@ -80,7 +82,7 @@ public class TriggerListAdapter {
return spinner; return spinner;
} }
private void createSpinner(Trigger trigger, FragmentManager fragmentManager) { private void createSpinner(Trigger trigger, Context context) {
final TriggerConnector connector = trigger.getConnector(); final TriggerConnector connector = trigger.getConnector();
final int initialPosition = connector.getConnectorType().ordinal(); final int initialPosition = connector.getConnectorType().ordinal();
Spinner spinner = createSpinner(); Spinner spinner = createSpinner();
@ -97,7 +99,7 @@ public class TriggerListAdapter {
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
if (position != initialPosition) { if (position != initialPosition) {
// connector type changed // connector type changed
changeConnector(fragmentManager, trigger, connector, TriggerConnector.Type.values()[position]); changeConnector(context, trigger, connector, TriggerConnector.Type.values()[position]);
} }
} }
@ -108,7 +110,8 @@ public class TriggerListAdapter {
mRootLayout.addView(spinner); mRootLayout.addView(spinner);
} }
private void createButtons(FragmentManager fragmentManager, Trigger trigger) { private void createButtons(LinearLayout rootLayout, Trigger trigger, Context context) {
FragmentManager fragmentManager = Trigger.scanForActivity(context).getSupportFragmentManager();
// do not create buttons for TriggerConnector // do not create buttons for TriggerConnector
if (trigger instanceof TriggerConnector) { if (trigger instanceof TriggerConnector) {
return; return;
@ -118,7 +121,6 @@ public class TriggerListAdapter {
LinearLayout buttonLayout = new LinearLayout(mContext); LinearLayout buttonLayout = new LinearLayout(mContext);
buttonLayout.setOrientation(LinearLayout.HORIZONTAL); buttonLayout.setOrientation(LinearLayout.HORIZONTAL);
buttonLayout.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)); buttonLayout.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
mRootLayout.addView(buttonLayout);
// Button [-] // Button [-]
Button buttonRemove = new Button(mContext); Button buttonRemove = new Button(mContext);
@ -126,7 +128,8 @@ public class TriggerListAdapter {
buttonRemove.setOnClickListener(v -> { buttonRemove.setOnClickListener(v -> {
final TriggerConnector connector = trigger.getConnector(); final TriggerConnector connector = trigger.getConnector();
connector.remove(trigger); connector.remove(trigger);
connector.simplify().rebuildView(fragmentManager); connector.simplify();
rebuild(context);
}); });
buttonLayout.addView(buttonRemove); buttonLayout.addView(buttonRemove);
@ -139,7 +142,8 @@ public class TriggerListAdapter {
dialog.setOnClickListener(newTriggerObject -> { dialog.setOnClickListener(newTriggerObject -> {
TriggerConnector connector = trigger.getConnector(); TriggerConnector connector = trigger.getConnector();
connector.add(connector.pos(trigger) + 1, newTriggerObject); connector.add(connector.pos(trigger) + 1, newTriggerObject);
connector.simplify().rebuildView(fragmentManager); connector.simplify();
rebuild(context);
}); });
}); });
buttonLayout.addView(buttonAdd); buttonLayout.addView(buttonAdd);
@ -150,17 +154,14 @@ public class TriggerListAdapter {
buttonCopy.setOnClickListener(v -> { buttonCopy.setOnClickListener(v -> {
TriggerConnector connector = trigger.getConnector(); TriggerConnector connector = trigger.getConnector();
connector.add(connector.pos(trigger) + 1, trigger.duplicate()); connector.add(connector.pos(trigger) + 1, trigger.duplicate());
connector.simplify().rebuildView(fragmentManager); connector.simplify();
rebuild(context);
}); });
buttonLayout.addView(buttonCopy); buttonLayout.addView(buttonCopy);
rootLayout.addView(buttonLayout);
} }
public void rebuild(FragmentManager fragmentManager) { public void changeConnector(final Context context, final Trigger trigger, final TriggerConnector connector, final TriggerConnector.Type newConnectorType) {
destroy();
build(fragmentManager);
}
public void changeConnector(final FragmentManager fragmentManager, final Trigger trigger, final TriggerConnector connector, final TriggerConnector.Type newConnectorType) {
if (connector.size() > 2) { if (connector.size() > 2) {
// split connector // split connector
int pos = connector.pos(trigger) - 1; int pos = connector.pos(trigger) - 1;
@ -178,6 +179,7 @@ public class TriggerListAdapter {
} else { } else {
connector.setType(newConnectorType); connector.setType(newConnectorType);
} }
connector.simplify().rebuildView(fragmentManager); connector.simplify();
rebuild(context);
} }
} }

View file

@ -45,18 +45,22 @@ abstract class Trigger(val mainApp: MainApp) {
abstract fun icon(): Optional<Int?> abstract fun icon(): Optional<Int?>
abstract fun duplicate(): Trigger abstract fun duplicate(): Trigger
open fun generateDialog(root: LinearLayout) {
val title = TextView(root.context)
title.setText(friendlyName())
root.addView(title)
}
companion object {
@JvmStatic
fun scanForActivity(cont: Context?): AppCompatActivity? { fun scanForActivity(cont: Context?): AppCompatActivity? {
if (cont == null) return null if (cont == null) return null
else if (cont is AppCompatActivity) return cont else if (cont is AppCompatActivity) return cont
else if (cont is ContextWrapper) return scanForActivity(cont.baseContext) else if (cont is ContextWrapper) return scanForActivity(cont.baseContext)
return null return null
} }
}
open fun generateDialog(root: LinearLayout) {
val title = TextView(root.context)
title.setText(friendlyName())
root.addView(title)
}
fun instantiate(obj: JSONObject): Trigger? { fun instantiate(obj: JSONObject): Trigger? {
try { try {

View file

@ -3,7 +3,6 @@ package info.nightscout.androidaps.plugins.general.automation.triggers
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.LinearLayout import android.widget.LinearLayout
import androidx.annotation.StringRes import androidx.annotation.StringRes
import androidx.fragment.app.FragmentManager
import com.google.common.base.Optional import com.google.common.base.Optional
import info.nightscout.androidaps.MainApp import info.nightscout.androidaps.MainApp
import info.nightscout.androidaps.R import info.nightscout.androidaps.R
@ -132,19 +131,15 @@ class TriggerConnector(mainApp: MainApp) : Trigger(mainApp) {
override fun duplicate(): Trigger = TriggerConnector(mainApp, connectorType) override fun duplicate(): Trigger = TriggerConnector(mainApp, connectorType)
private var adapter: TriggerListAdapter? = null
fun rebuildView(fragmentManager: FragmentManager) = adapter?.rebuild(fragmentManager)
override fun generateDialog(root: LinearLayout) { override fun generateDialog(root: LinearLayout) {
val padding = resourceHelper.dpToPx(5) val padding = resourceHelper.dpToPx(5)
root.setPadding(padding, padding, padding, padding) root.setPadding(padding, padding, padding, padding)
root.setBackgroundResource(R.drawable.border_automation_unit) root.setBackgroundResource(R.drawable.border_automation_unit)
val triggerListLayout = LinearLayout(root.context) val listLayout = LinearLayout(root.context)
triggerListLayout.orientation = LinearLayout.VERTICAL listLayout.orientation = LinearLayout.VERTICAL
triggerListLayout.layoutParams = LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT) listLayout.layoutParams = LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)
root.addView(triggerListLayout) root.addView(listLayout)
adapter = TriggerListAdapter(mainApp, resourceHelper, root.context, triggerListLayout, this) TriggerListAdapter(mainApp, resourceHelper, listLayout, this)
} }
fun simplify(): TriggerConnector { // simplify children fun simplify(): TriggerConnector { // simplify children