Fixed a bunch of bugs with task edit popover and screen rotation

pull/14/head
Sam Bosley 14 years ago
parent e94abecbc9
commit 63a4b7e2d8

@ -26,9 +26,31 @@
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_margin="3dip"
android:gravity="center_vertical"
android:background="@drawable/task_edit_background"
android:orientation="vertical"
android:orientation="horizontal"
android:paddingRight="6dip" >
<LinearLayout
android:id="@+id/save_and_cancel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:visibility="gone">
<ImageButton
android:id="@+id/cancel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="10dip"
android:background="@android:color/transparent"
android:src="@android:drawable/ic_menu_close_clear_cancel"/>
<ImageButton
android:id="@+id/save"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@android:color/transparent"
android:src="@android:drawable/ic_menu_save"/>
</LinearLayout>
</LinearLayout>
<LinearLayout

@ -49,6 +49,7 @@ import android.view.LayoutInflater;
import android.view.MenuInflater;
import android.view.View;
import android.view.View.MeasureSpec;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.view.ViewParent;
@ -238,8 +239,6 @@ public final class TaskEditActivity extends Fragment implements
// --- fragment handling variables
OnTaskEditDetailsClickedListener mListener;
private boolean mDualFragments = false;
private long remoteId = 0;
/*
@ -316,9 +315,22 @@ public final class TaskEditActivity extends Fragment implements
getSupportActivity().getSupportActionBar().setDisplayHomeAsUpEnabled(
true);
Fragment tasklistFrame = getFragmentManager().findFragmentByTag(
TaskListActivity.TAG_TASKLIST_FRAGMENT);
mDualFragments = (tasklistFrame != null) && tasklistFrame.isInLayout();
AstridWrapperActivity activity = (AstridWrapperActivity) getActivity();
if (activity instanceof TaskListWrapperActivity && activity.fragmentLayout == AstridWrapperActivity.LAYOUT_DOUBLE) {
getView().findViewById(R.id.save_and_cancel).setVisibility(View.VISIBLE);
getView().findViewById(R.id.save).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
saveButtonClick();
}
});
getView().findViewById(R.id.cancel).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
discardButtonClick();
}
});
}
setUpUIComponents();
adjustInfoPopovers();
@ -409,7 +421,7 @@ public final class TaskEditActivity extends Fragment implements
R.layout.control_set_title, Task.TITLE, R.id.title);
title = (EditText) editTitle.getView().findViewById(R.id.title);
controls.add(editTitle);
titleControls.addView(editTitle.getDisplayView());
titleControls.addView(editTitle.getDisplayView(), 0, new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT, 1.0f));
TimerActionControlSet timerAction = new TimerActionControlSet(
getActivity(), editTitle.getView());
@ -976,14 +988,16 @@ public final class TaskEditActivity extends Fragment implements
super.onCreateOptionsMenu(menu, inflater);
MenuItem item;
item = menu.add(Menu.NONE, MENU_DISCARD_ID, 0,
R.string.TEA_menu_discard);
AstridWrapperActivity activity = (AstridWrapperActivity) getActivity();
if (activity instanceof TaskListWrapperActivity && activity.fragmentLayout != AstridWrapperActivity.LAYOUT_DOUBLE) {
item = menu.add(Menu.NONE, MENU_DISCARD_ID, 0, R.string.TEA_menu_discard);
item.setIcon(android.R.drawable.ic_menu_close_clear_cancel);
item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
item = menu.add(Menu.NONE, MENU_SAVE_ID, 0, R.string.TEA_menu_save);
item.setIcon(android.R.drawable.ic_menu_save);
item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
}
item = menu.add(Menu.NONE, MENU_DELETE_ID, 0, R.string.TEA_menu_delete);
item.setIcon(android.R.drawable.ic_menu_delete);

@ -6,8 +6,10 @@ import android.os.Bundle;
import android.support.v4.app.ActionBar;
import android.support.v4.app.Fragment;
import android.util.DisplayMetrics;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.view.ViewGroup.LayoutParams;
import android.widget.FrameLayout;
import android.widget.PopupWindow.OnDismissListener;
@ -30,6 +32,8 @@ public class TaskListWrapperActivity extends AstridWrapperActivity {
private FragmentPopover listsPopover;
private FragmentPopover editPopover;
private boolean suppressTaskSave = false;
private final OnClickListener popupMenuClickListener = new OnClickListener() {
@Override
public void onClick(View v) {
@ -37,6 +41,23 @@ public class TaskListWrapperActivity extends AstridWrapperActivity {
listsPopover.show(v);
}
};
private final OnDismissListener editPopoverDismissListener = new OnDismissListener() {
@Override
public void onDismiss() {
TaskEditActivity tea = getTaskEditFragment();
if (tea != null) {
try {
if (!suppressTaskSave)
tea.save(false);
suppressTaskSave = false;
} catch (IllegalStateException e) {
// Save during pause, ignore it
}
}
}
};
/**
* @see android.app.Activity#onCreate(Bundle)
*/
@ -100,12 +121,15 @@ public class TaskListWrapperActivity extends AstridWrapperActivity {
private void createEditPopover() {
editPopover = new FragmentPopover(this, R.layout.taskedit_popover);
editPopover.setOnDismissListener(new OnDismissListener() {
editPopover.setOnDismissListener(editPopoverDismissListener);
editPopover.setTouchInterceptor(new OnTouchListener() {
@Override
public void onDismiss() {
TaskEditActivity tea = getTaskEditFragment();
if (tea != null)
tea.save(true);
public boolean onTouch(View v, MotionEvent event) {
int x = (int) event.getX();
int y = (int) event.getY();
if ((event.getAction() == MotionEvent.ACTION_DOWN)
&& ((x < 0) || (x >= editPopover.getContentView().getWidth()) || (y < 0) || (y >= editPopover.getContentView().getHeight()))) return true;
return false;
}
});
}
@ -162,6 +186,10 @@ public class TaskListWrapperActivity extends AstridWrapperActivity {
setupTasklistFragmentWithFilter(savedFilter);
if (savedFilter != null)
lists.setText(savedFilter.title);
TaskEditActivity tea = getTaskEditFragment();
if (tea != null)
onBackPressed();
}
@Override
@ -189,6 +217,11 @@ public class TaskListWrapperActivity extends AstridWrapperActivity {
findViewById(R.id.taskedit_fragment_container).setVisibility(View.INVISIBLE);
}
onPostResume();
} else {
if (editPopover != null && editPopover.isShowing()) {
suppressTaskSave = true;
editPopover.dismiss();
}
}
super.onBackPressed();
}

Loading…
Cancel
Save