Refactoring

pull/184/head
M66B 5 years ago
parent 9064072e2e
commit 2dd695eb18

@ -64,6 +64,8 @@ import androidx.recyclerview.widget.DividerItemDecoration;
import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
import com.google.android.material.snackbar.Snackbar;
import org.json.JSONArray; import org.json.JSONArray;
import org.json.JSONObject; import org.json.JSONObject;
@ -715,10 +717,69 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB
return super.onOptionsItemSelected(item); return super.onOptionsItemSelected(item);
} }
View getContentView() { public void undo(String title, final Bundle args, final SimpleTask<Void> move, final SimpleTask<Void> show) {
if (drawerLayout == null || drawerLayout.getChildCount() == 0) SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
return null; int undo_timeout = prefs.getInt("undo_timeout", 5000);
return drawerLayout.getChildAt(0);
if (undo_timeout == 0) {
move.execute(this, args, "undo:move");
return;
}
if (drawerLayout == null || drawerLayout.getChildCount() == 0) {
Log.e("Undo: drawer missing");
return;
}
final View content = drawerLayout.getChildAt(0);
final Snackbar snackbar = Snackbar.make(content, title, Snackbar.LENGTH_INDEFINITE)
.setGestureInsetBottomIgnored(true);
snackbar.setAction(R.string.title_undo, new View.OnClickListener() {
@Override
public void onClick(View v) {
snackbar.dismiss();
snackbar.getView().setTag(true);
show.execute(ActivityView.this, args, "undo:show");
}
});
snackbar.addCallback(new Snackbar.Callback() {
private int margin;
@Override
public void onShown(Snackbar sb) {
ViewGroup.MarginLayoutParams lparam = (ViewGroup.MarginLayoutParams) content.getLayoutParams();
margin = lparam.bottomMargin;
lparam.bottomMargin += snackbar.getView().getHeight();
content.setLayoutParams(lparam);
}
@Override
public void onDismissed(Snackbar transientBottomBar, int event) {
ViewGroup.MarginLayoutParams lparam = (ViewGroup.MarginLayoutParams) content.getLayoutParams();
lparam.bottomMargin = margin;
content.setLayoutParams(lparam);
}
});
snackbar.show();
// Wait
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
Log.i("Move timeout");
if (snackbar.getView().getTag() != null)
return;
// Remove snackbar
if (snackbar.isShown())
snackbar.dismiss();
move.execute(ActivityView.this, args, "undo:move");
}
}, undo_timeout);
} }
private void checkFirst() { private void checkFirst() {

@ -211,7 +211,6 @@ import me.everything.android.ui.overscroll.VerticalOverScrollBounceEffectDecorat
import me.everything.android.ui.overscroll.adapters.RecyclerViewOverScrollDecorAdapter; import me.everything.android.ui.overscroll.adapters.RecyclerViewOverScrollDecorAdapter;
import static android.app.Activity.RESULT_OK; import static android.app.Activity.RESULT_OK;
import static android.os.Process.THREAD_PRIORITY_BACKGROUND;
import static android.text.format.DateUtils.DAY_IN_MILLIS; import static android.text.format.DateUtils.DAY_IN_MILLIS;
import static android.text.format.DateUtils.FORMAT_SHOW_DATE; import static android.text.format.DateUtils.FORMAT_SHOW_DATE;
import static android.text.format.DateUtils.FORMAT_SHOW_WEEKDAY; import static android.text.format.DateUtils.FORMAT_SHOW_WEEKDAY;
@ -4712,18 +4711,18 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences.
}.execute(this, args, "messages:move"); }.execute(this, args, "messages:move");
} }
private void moveUndo(ArrayList<MessageTarget> result) { private void moveUndo(final ArrayList<MessageTarget> result) {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext()); final Bundle args = new Bundle();
final int undo_timeout = prefs.getInt("undo_timeout", 5000);
Bundle args = new Bundle();
args.putParcelableArrayList("result", result); args.putParcelableArrayList("result", result);
new SimpleTask<ArrayList<MessageTarget>>() { new SimpleTask<Void>() {
@Override @Override
protected ArrayList<MessageTarget> onExecute(Context context, Bundle args) throws Throwable { protected Void onExecute(Context context, Bundle args) {
ArrayList<MessageTarget> result = args.getParcelableArrayList("result"); ArrayList<MessageTarget> result = args.getParcelableArrayList("result");
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
final int undo_timeout = prefs.getInt("undo_timeout", 5000);
DB db = DB.getInstance(context); DB db = DB.getInstance(context);
long now = new Date().getTime(); long now = new Date().getTime();
@ -4744,11 +4743,11 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences.
db.endTransaction(); db.endTransaction();
} }
return result; return null;
} }
@Override @Override
protected void onExecuted(Bundle args, final ArrayList<MessageTarget> result) { protected void onExecuted(Bundle args, Void data) {
if (viewType == AdapterMessage.ViewType.THREAD) { if (viewType == AdapterMessage.ViewType.THREAD) {
PagedList<TupleMessageEx> messages = adapter.getCurrentList(); PagedList<TupleMessageEx> messages = adapter.getCurrentList();
if (messages != null && result.size() > 0) { if (messages != null && result.size() > 0) {
@ -4757,10 +4756,11 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences.
} }
} }
final Context context = getContext().getApplicationContext(); SimpleTask<Void> move = new SimpleTask<Void>() {
Thread thread = new Thread(new Runnable() {
@Override @Override
public void run() { protected Void onExecute(Context context, Bundle args) {
ArrayList<MessageTarget> result = args.getParcelableArrayList("result");
DB db = DB.getInstance(context); DB db = DB.getInstance(context);
try { try {
db.beginTransaction(); db.beginTransaction();
@ -4777,53 +4777,21 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences.
} }
db.setTransactionSuccessful(); db.setTransactionSuccessful();
} catch (Throwable ex) {
Log.e(ex);
} finally { } finally {
db.endTransaction(); db.endTransaction();
} }
ServiceSynchronize.eval(context, "move"); ServiceSynchronize.eval(context, "move");
} return null;
}, "messages:movetimeout");
thread.setPriority(THREAD_PRIORITY_BACKGROUND);
if (undo_timeout == 0) {
thread.start();
return;
}
FragmentActivity factivity = getActivity();
if (!(factivity instanceof ActivityView)) {
Log.e("Undo: activity missing");
return;
}
ActivityView activity = (ActivityView) factivity;
View content = activity.getContentView();
if (content == null) {
Log.e("Undo: view missing");
return;
} }
// Show undo snackbar
final Snackbar snackbar = Snackbar.make(
content,
getString(R.string.title_move_undo, getDisplay(result), result.size()),
Snackbar.LENGTH_INDEFINITE)
.setGestureInsetBottomIgnored(true);
snackbar.setAction(R.string.title_undo, new View.OnClickListener() {
@Override @Override
public void onClick(View v) { protected void onException(Bundle args, Throwable ex) {
snackbar.dismiss(); Log.e(ex);
snackbar.getView().setTag(true); }
};
Bundle args = new Bundle();
args.putParcelableArrayList("result", result);
// Show message again SimpleTask<Void> show = new SimpleTask<Void>() {
new SimpleTask<Void>() {
@Override @Override
protected Void onExecute(Context context, Bundle args) { protected Void onExecute(Context context, Bundle args) {
ArrayList<MessageTarget> result = args.getParcelableArrayList("result"); ArrayList<MessageTarget> result = args.getParcelableArrayList("result");
@ -4849,54 +4817,25 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences.
@Override @Override
protected void onException(Bundle args, Throwable ex) { protected void onException(Bundle args, Throwable ex) {
Log.unexpectedError(getParentFragmentManager(), ex); Log.e(ex);
}
}.execute(activity, activity, args, "messages:moveundo");
}
});
snackbar.addCallback(new Snackbar.Callback() {
private int margin;
@Override
public void onShown(Snackbar sb) {
ViewGroup.MarginLayoutParams lparam = (ViewGroup.MarginLayoutParams) content.getLayoutParams();
margin = lparam.bottomMargin;
lparam.bottomMargin += snackbar.getView().getHeight();
content.setLayoutParams(lparam);
}
@Override
public void onDismissed(Snackbar transientBottomBar, int event) {
ViewGroup.MarginLayoutParams lparam = (ViewGroup.MarginLayoutParams) content.getLayoutParams();
lparam.bottomMargin = margin;
content.setLayoutParams(lparam);
} }
}); };
snackbar.show();
// Wait
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
Log.i("Move timeout");
if (snackbar.getView().getTag() != null) FragmentActivity activity = getActivity();
if (!(activity instanceof ActivityView)) {
Log.e("Undo: activity missing");
return; return;
// Remove snackbar
if (snackbar.isShown())
snackbar.dismiss();
thread.start();
} }
}, undo_timeout);
String title = getString(R.string.title_move_undo, getDisplay(result), result.size());
((ActivityView) activity).undo(title, args, move, show);
} }
@Override @Override
protected void onException(Bundle args, Throwable ex) { protected void onException(Bundle args, Throwable ex) {
Log.unexpectedError(getParentFragmentManager(), ex); Log.unexpectedError(getParentFragmentManager(), ex);
} }
}.execute(this, args, "messages:movehide"); }.execute(this, args, "undo:hide");
} }
private String getDisplay(ArrayList<MessageTarget> result) { private String getDisplay(ArrayList<MessageTarget> result) {

Loading…
Cancel
Save