Refactoring

pull/147/head
M66B 7 years ago
parent bb1e697c41
commit 3b06c3d027

@ -150,7 +150,21 @@ public class AdapterAttachment extends RecyclerView.Adapter<AdapterAttachment.Vi
return; return;
final EntityAttachment attachment = filtered.get(pos); final EntityAttachment attachment = filtered.get(pos);
if (view.getId() == R.id.ivDelete) { if (view.getId() == R.id.ivDelete)
onDelete(attachment);
else if (view.getId() == R.id.ivSave)
onSave(attachment);
else {
if (attachment.available)
onShare(attachment);
else {
if (attachment.progress == null)
onDownload(attachment);
}
}
}
private void onDelete(final EntityAttachment attachment) {
Bundle args = new Bundle(); Bundle args = new Bundle();
args.putLong("id", attachment.id); args.putLong("id", attachment.id);
@ -167,17 +181,18 @@ public class AdapterAttachment extends RecyclerView.Adapter<AdapterAttachment.Vi
Helper.unexpectedError(context, owner, ex); Helper.unexpectedError(context, owner, ex);
} }
}.execute(context, owner, args, "attachment:delete"); }.execute(context, owner, args, "attachment:delete");
}
} else if (view.getId() == R.id.ivSave) { private void onSave(EntityAttachment attachment) {
LocalBroadcastManager lbm = LocalBroadcastManager.getInstance(context); LocalBroadcastManager lbm = LocalBroadcastManager.getInstance(context);
lbm.sendBroadcast( lbm.sendBroadcast(
new Intent(ActivityView.ACTION_STORE_ATTACHMENT) new Intent(ActivityView.ACTION_STORE_ATTACHMENT)
.putExtra("id", attachment.id) .putExtra("id", attachment.id)
.putExtra("name", attachment.name) .putExtra("name", attachment.name)
.putExtra("type", attachment.type)); .putExtra("type", attachment.type));
}
} else { private void onShare(EntityAttachment attachment) {
if (attachment.available) {
// Build file name // Build file name
File file = EntityAttachment.getFile(context, attachment.id); File file = EntityAttachment.getFile(context, attachment.id);
@ -243,8 +258,9 @@ public class AdapterAttachment extends RecyclerView.Adapter<AdapterAttachment.Vi
dialog.show(); dialog.show();
} else } else
context.startActivity(intent); context.startActivity(intent);
} else { }
if (attachment.progress == null) {
private void onDownload(EntityAttachment attachment) {
Bundle args = new Bundle(); Bundle args = new Bundle();
args.putLong("id", attachment.id); args.putLong("id", attachment.id);
args.putLong("message", attachment.message); args.putLong("message", attachment.message);
@ -280,9 +296,6 @@ public class AdapterAttachment extends RecyclerView.Adapter<AdapterAttachment.Vi
} }
}.execute(context, owner, args, "attachment:fetch"); }.execute(context, owner, args, "attachment:fetch");
} }
}
}
}
private class NameResolveInfo { private class NameResolveInfo {
Drawable icon; Drawable icon;

@ -267,43 +267,7 @@ public class FragmentAccount extends FragmentBase {
btnAutoConfig.setOnClickListener(new View.OnClickListener() { btnAutoConfig.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
Bundle args = new Bundle(); onAutoConfig();
args.putString("domain", etDomain.getText().toString());
new SimpleTask<EmailProvider>() {
@Override
protected void onPreExecute(Bundle args) {
etDomain.setEnabled(false);
btnAutoConfig.setEnabled(false);
}
@Override
protected void onPostExecute(Bundle args) {
etDomain.setEnabled(true);
btnAutoConfig.setEnabled(true);
}
@Override
protected EmailProvider onExecute(Context context, Bundle args) throws Throwable {
String domain = args.getString("domain");
return EmailProvider.fromDomain(context, domain);
}
@Override
protected void onExecuted(Bundle args, EmailProvider provider) {
etHost.setText(provider.imap_host);
etPort.setText(Integer.toString(provider.imap_port));
cbStartTls.setChecked(provider.imap_starttls);
}
@Override
protected void onException(Bundle args, Throwable ex) {
if (ex instanceof IllegalArgumentException || ex instanceof UnknownHostException)
Snackbar.make(view, ex.getMessage(), Snackbar.LENGTH_LONG).show();
else
Helper.unexpectedError(getContext(), getViewLifecycleOwner(), ex);
}
}.execute(FragmentAccount.this, args, "account:config");
} }
}); });
@ -418,6 +382,96 @@ public class FragmentAccount extends FragmentBase {
btnCheck.setOnClickListener(new View.OnClickListener() { btnCheck.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
onCheck();
}
});
btnSave.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onSave();
}
});
adapter = new ArrayAdapter<>(getContext(), R.layout.spinner_item1, android.R.id.text1, new ArrayList<EntityFolder>());
adapter.setDropDownViewResource(R.layout.spinner_item1_dropdown);
spDrafts.setAdapter(adapter);
spSent.setAdapter(adapter);
spAll.setAdapter(adapter);
spTrash.setAdapter(adapter);
spJunk.setAdapter(adapter);
// Initialize
Helper.setViewsEnabled(view, false);
btnAutoConfig.setEnabled(false);
btnAuthorize.setVisibility(View.GONE);
cbStartTls.setVisibility(View.GONE);
cbInsecure.setVisibility(View.GONE);
tilPassword.setPasswordVisibilityToggleEnabled(id < 0);
btnAdvanced.setVisibility(View.GONE);
tvIdle.setVisibility(View.GONE);
btnCheck.setVisibility(View.GONE);
pbCheck.setVisibility(View.GONE);
btnSave.setVisibility(View.GONE);
pbSave.setVisibility(View.GONE);
tvError.setVisibility(View.GONE);
grpServer.setVisibility(View.GONE);
grpAuthorize.setVisibility(View.GONE);
grpAdvanced.setVisibility(View.GONE);
grpFolders.setVisibility(View.GONE);
return view;
}
private void onAutoConfig() {
Bundle args = new Bundle();
args.putString("domain", etDomain.getText().toString());
new SimpleTask<EmailProvider>() {
@Override
protected void onPreExecute(Bundle args) {
etDomain.setEnabled(false);
btnAutoConfig.setEnabled(false);
}
@Override
protected void onPostExecute(Bundle args) {
etDomain.setEnabled(true);
btnAutoConfig.setEnabled(true);
}
@Override
protected EmailProvider onExecute(Context context, Bundle args) throws Throwable {
String domain = args.getString("domain");
return EmailProvider.fromDomain(context, domain);
}
@Override
protected void onExecuted(Bundle args, EmailProvider provider) {
etHost.setText(provider.imap_host);
etPort.setText(Integer.toString(provider.imap_port));
cbStartTls.setChecked(provider.imap_starttls);
}
@Override
protected void onException(Bundle args, Throwable ex) {
if (ex instanceof IllegalArgumentException || ex instanceof UnknownHostException)
Snackbar.make(view, ex.getMessage(), Snackbar.LENGTH_LONG).show();
else
Helper.unexpectedError(getContext(), getViewLifecycleOwner(), ex);
}
}.execute(FragmentAccount.this, args, "account:config");
}
private void onCheck() {
EmailProvider provider = (EmailProvider) spProvider.getSelectedItem(); EmailProvider provider = (EmailProvider) spProvider.getSelectedItem();
Bundle args = new Bundle(); Bundle args = new Bundle();
@ -625,11 +679,8 @@ public class FragmentAccount extends FragmentBase {
} }
}.execute(FragmentAccount.this, args, "account:check"); }.execute(FragmentAccount.this, args, "account:check");
} }
});
btnSave.setOnClickListener(new View.OnClickListener() { private void onSave() {
@Override
public void onClick(View v) {
EmailProvider provider = (EmailProvider) spProvider.getSelectedItem(); EmailProvider provider = (EmailProvider) spProvider.getSelectedItem();
EntityFolder drafts = (EntityFolder) spDrafts.getSelectedItem(); EntityFolder drafts = (EntityFolder) spDrafts.getSelectedItem();
@ -840,7 +891,7 @@ public class FragmentAccount extends FragmentBase {
account.id = db.account().insertAccount(account); account.id = db.account().insertAccount(account);
// Make sure the channel exists on commit // Make sure the channel exists on commit
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
if (account.notify) { if (account.notify) {
// Add or update notification channel // Add or update notification channel
account.deleteNotificationChannel(context); account.deleteNotificationChannel(context);
@ -939,45 +990,6 @@ public class FragmentAccount extends FragmentBase {
} }
}.execute(FragmentAccount.this, args, "account:save"); }.execute(FragmentAccount.this, args, "account:save");
} }
});
adapter = new ArrayAdapter<>(getContext(), R.layout.spinner_item1, android.R.id.text1, new ArrayList<EntityFolder>());
adapter.setDropDownViewResource(R.layout.spinner_item1_dropdown);
spDrafts.setAdapter(adapter);
spSent.setAdapter(adapter);
spAll.setAdapter(adapter);
spTrash.setAdapter(adapter);
spJunk.setAdapter(adapter);
// Initialize
Helper.setViewsEnabled(view, false);
btnAutoConfig.setEnabled(false);
btnAuthorize.setVisibility(View.GONE);
cbStartTls.setVisibility(View.GONE);
cbInsecure.setVisibility(View.GONE);
tilPassword.setPasswordVisibilityToggleEnabled(id < 0);
btnAdvanced.setVisibility(View.GONE);
tvIdle.setVisibility(View.GONE);
btnCheck.setVisibility(View.GONE);
pbCheck.setVisibility(View.GONE);
btnSave.setVisibility(View.GONE);
pbSave.setVisibility(View.GONE);
tvError.setVisibility(View.GONE);
grpServer.setVisibility(View.GONE);
grpAuthorize.setVisibility(View.GONE);
grpAdvanced.setVisibility(View.GONE);
grpFolders.setVisibility(View.GONE);
return view;
}
@Override @Override
public void onSaveInstanceState(Bundle outState) { public void onSaveInstanceState(Bundle outState) {

@ -126,6 +126,20 @@ public class FragmentFolder extends FragmentBase {
btnSave.setOnClickListener(new View.OnClickListener() { btnSave.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
onSave();
}
});
// Initialize
Helper.setViewsEnabled(view, false);
btnSave.setEnabled(false);
pbSave.setVisibility(View.GONE);
pbWait.setVisibility(View.VISIBLE);
return view;
}
private void onSave() {
Bundle args = new Bundle(); Bundle args = new Bundle();
args.putLong("id", id); args.putLong("id", id);
args.putLong("account", account); args.putLong("account", account);
@ -261,16 +275,6 @@ public class FragmentFolder extends FragmentBase {
} }
}.execute(FragmentFolder.this, args, "folder:save"); }.execute(FragmentFolder.this, args, "folder:save");
} }
});
// Initialize
Helper.setViewsEnabled(view, false);
btnSave.setEnabled(false);
pbSave.setVisibility(View.GONE);
pbWait.setVisibility(View.VISIBLE);
return view;
}
@Override @Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {

@ -382,6 +382,52 @@ public class FragmentIdentity extends FragmentBase {
btnAutoConfig.setOnClickListener(new View.OnClickListener() { btnAutoConfig.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
onAutoConfig();
}
});
cbStartTls.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean checked) {
etPort.setHint(checked ? "587" : "465");
}
});
cbSynchronize.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean checked) {
cbPrimary.setEnabled(checked);
}
});
btnSave.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onSave();
}
});
adapter = new ArrayAdapter<>(getContext(), R.layout.spinner_item1, android.R.id.text1, new ArrayList<EntityFolder>());
adapter.setDropDownViewResource(R.layout.spinner_item1_dropdown);
spSent.setAdapter(adapter);
// Initialize
Helper.setViewsEnabled(view, false);
btnAutoConfig.setEnabled(false);
cbInsecure.setVisibility(View.GONE);
tilPassword.setPasswordVisibilityToggleEnabled(id < 0);
btnSave.setVisibility(View.GONE);
btnAdvanced.setVisibility(View.GONE);
pbSave.setVisibility(View.GONE);
tvError.setVisibility(View.GONE);
grpAuthorize.setVisibility(View.GONE);
grpAdvanced.setVisibility(View.GONE);
return view;
}
private void onAutoConfig() {
etDomain.setEnabled(false); etDomain.setEnabled(false);
btnAutoConfig.setEnabled(false); btnAutoConfig.setEnabled(false);
@ -423,25 +469,8 @@ public class FragmentIdentity extends FragmentBase {
} }
}.execute(FragmentIdentity.this, args, "identity:config"); }.execute(FragmentIdentity.this, args, "identity:config");
} }
});
cbStartTls.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { private void onSave() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean checked) {
etPort.setHint(checked ? "587" : "465");
}
});
cbSynchronize.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean checked) {
cbPrimary.setEnabled(checked);
}
});
btnSave.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
EntityAccount account = (EntityAccount) spAccount.getSelectedItem(); EntityAccount account = (EntityAccount) spAccount.getSelectedItem();
String name = etName.getText().toString(); String name = etName.getText().toString();
@ -661,27 +690,6 @@ public class FragmentIdentity extends FragmentBase {
} }
}.execute(FragmentIdentity.this, args, "identity:save"); }.execute(FragmentIdentity.this, args, "identity:save");
} }
});
adapter = new ArrayAdapter<>(getContext(), R.layout.spinner_item1, android.R.id.text1, new ArrayList<EntityFolder>());
adapter.setDropDownViewResource(R.layout.spinner_item1_dropdown);
spSent.setAdapter(adapter);
// Initialize
Helper.setViewsEnabled(view, false);
btnAutoConfig.setEnabled(false);
cbInsecure.setVisibility(View.GONE);
tilPassword.setPasswordVisibilityToggleEnabled(id < 0);
btnSave.setVisibility(View.GONE);
btnAdvanced.setVisibility(View.GONE);
pbSave.setVisibility(View.GONE);
tvError.setVisibility(View.GONE);
grpAuthorize.setVisibility(View.GONE);
grpAdvanced.setVisibility(View.GONE);
return view;
}
@Override @Override
public void onSaveInstanceState(Bundle outState) { public void onSaveInstanceState(Bundle outState) {

@ -133,6 +133,17 @@ public class FragmentMessages extends FragmentBase {
private ExecutorService executor = Executors.newSingleThreadExecutor(Helper.backgroundThreadFactory); private ExecutorService executor = Executors.newSingleThreadExecutor(Helper.backgroundThreadFactory);
private final int action_seen = 1;
private final int action_unseen = 2;
private final int action_snooze = 3;
private final int action_flag = 4;
private final int action_unflag = 5;
private final int action_archive = 6;
private final int action_trash = 7;
private final int action_delete = 8;
private final int action_junk = 9;
private final int action_move = 10;
private static final int LOCAL_PAGE_SIZE = 100; private static final int LOCAL_PAGE_SIZE = 100;
private static final int REMOTE_PAGE_SIZE = 10; private static final int REMOTE_PAGE_SIZE = 10;
private static final int UNDO_TIMEOUT = 5000; // milliseconds private static final int UNDO_TIMEOUT = 5000; // milliseconds
@ -211,6 +222,178 @@ public class FragmentMessages extends FragmentBase {
swipeRefresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { swipeRefresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override @Override
public void onRefresh() { public void onRefresh() {
onSwipeRefresh();
}
});
tvSupport.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.content_frame, new FragmentPro()).addToBackStack("pro");
fragmentTransaction.commit();
}
});
ibHintSupport.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
prefs.edit().putBoolean("app_support", true).apply();
grpHintSupport.setVisibility(View.GONE);
}
});
ibHintSwipe.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
prefs.edit().putBoolean("message_swipe", true).apply();
grpHintSwipe.setVisibility(View.GONE);
}
});
ibHintSelect.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
prefs.edit().putBoolean("message_select", true).apply();
grpHintSelect.setVisibility(View.GONE);
}
});
rvMessage.setHasFixedSize(false);
//rvMessage.setItemViewCacheSize(10);
//rvMessage.getRecycledViewPool().setMaxRecycledViews(0, 10);
LinearLayoutManager llm = new LinearLayoutManager(getContext());
rvMessage.setLayoutManager(llm);
boolean compact = prefs.getBoolean("compact", false);
int zoom = prefs.getInt("zoom", compact ? 0 : 1);
adapter = new AdapterMessage(
getContext(), getViewLifecycleOwner(), getFragmentManager(),
viewType, outgoing, compact, zoom, iProperties);
rvMessage.setAdapter(adapter);
if (viewType != AdapterMessage.ViewType.THREAD) {
final SelectionPredicateMessage predicate = new SelectionPredicateMessage(rvMessage);
selectionTracker = new SelectionTracker.Builder<>(
"messages-selection",
rvMessage,
new ItemKeyProviderMessage(rvMessage),
new ItemDetailsLookupMessage(rvMessage),
StorageStrategy.createLongStorage())
.withSelectionPredicate(predicate)
.build();
adapter.setSelectionTracker(selectionTracker);
selectionTracker.addObserver(new SelectionTracker.SelectionObserver() {
@Override
public void onSelectionChanged() {
// Workaround AndroidX bug
FragmentActivity activity = getActivity();
if (activity != null)
try {
ViewModelMessages modelMessages = ViewModelProviders.of(activity).get(ViewModelMessages.class);
if (selectionTracker.hasSelection())
modelMessages.removeObservers(viewType, getViewLifecycleOwner());
else
modelMessages.observe(viewType, getViewLifecycleOwner(), observer);
} catch (IllegalStateException ex) {
// getViewLifecycleOwner
Log.w(ex);
}
if (selectionTracker.hasSelection()) {
swipeRefresh.setEnabled(false);
fabMore.show();
} else {
predicate.clearAccount();
fabMore.hide();
swipeRefresh.setEnabled(pull);
}
}
});
}
new ItemTouchHelper(touchHelper).attachToRecyclerView(rvMessage);
bottom_navigation.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
switch (menuItem.getItemId()) {
case R.id.action_delete:
onActionMove(EntityFolder.TRASH);
return true;
case R.id.action_archive:
onActionMove(EntityFolder.ARCHIVE);
return true;
case R.id.action_prev:
navigate(false);
return true;
case R.id.action_next:
navigate(true);
return true;
default:
return false;
}
}
});
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
EntityFolder drafts = (EntityFolder) fab.getTag();
startActivity(new Intent(getContext(), ActivityCompose.class)
.putExtra("action", "new")
.putExtra("account", drafts.account)
);
}
});
fab.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
EntityFolder drafts = (EntityFolder) fab.getTag();
LocalBroadcastManager lbm = LocalBroadcastManager.getInstance(getContext());
lbm.sendBroadcast(
new Intent(ActivityView.ACTION_VIEW_MESSAGES)
.putExtra("account", drafts.account)
.putExtra("folder", drafts.id)
.putExtra("outgoing", drafts.isOutgoing()));
return true;
}
});
fabMore.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onMore();
}
});
((ActivityBase) getActivity()).addBackPressedListener(onBackPressedListener);
// Initialize
swipeRefresh.setEnabled(pull);
tvNoEmail.setVisibility(View.GONE);
bottom_navigation.setVisibility(View.GONE);
grpReady.setVisibility(View.GONE);
pbWait.setVisibility(View.VISIBLE);
fab.hide();
fabMore.hide();
return view;
}
private void onSwipeRefresh() {
Bundle args = new Bundle(); Bundle args = new Bundle();
args.putLong("folder", folder); args.putLong("folder", folder);
@ -271,54 +454,8 @@ public class FragmentMessages extends FragmentBase {
} }
}.execute(FragmentMessages.this, args, "messages:refresh"); }.execute(FragmentMessages.this, args, "messages:refresh");
} }
});
tvSupport.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.content_frame, new FragmentPro()).addToBackStack("pro");
fragmentTransaction.commit();
}
});
ibHintSupport.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
prefs.edit().putBoolean("app_support", true).apply();
grpHintSupport.setVisibility(View.GONE);
}
});
ibHintSwipe.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
prefs.edit().putBoolean("message_swipe", true).apply();
grpHintSwipe.setVisibility(View.GONE);
}
});
ibHintSelect.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
prefs.edit().putBoolean("message_select", true).apply();
grpHintSelect.setVisibility(View.GONE);
}
});
rvMessage.setHasFixedSize(false);
//rvMessage.setItemViewCacheSize(10);
//rvMessage.getRecycledViewPool().setMaxRecycledViews(0, 10);
LinearLayoutManager llm = new LinearLayoutManager(getContext());
rvMessage.setLayoutManager(llm);
boolean compact = prefs.getBoolean("compact", false); private AdapterMessage.IProperties iProperties = new AdapterMessage.IProperties() {
int zoom = prefs.getInt("zoom", compact ? 0 : 1);
adapter = new AdapterMessage(
getContext(), getViewLifecycleOwner(), getFragmentManager(),
viewType, outgoing,
compact, zoom,
new AdapterMessage.IProperties() {
@Override @Override
public void setValue(String name, long id, boolean enabled) { public void setValue(String name, long id, boolean enabled) {
if (!values.containsKey(name)) if (!values.containsKey(name))
@ -410,55 +547,12 @@ public class FragmentMessages extends FragmentBase {
} }
}.execute(FragmentMessages.this, args, "messages:move"); }.execute(FragmentMessages.this, args, "messages:move");
} }
}); };
rvMessage.setAdapter(adapter);
if (viewType != AdapterMessage.ViewType.THREAD) {
final SelectionPredicateMessage predicate = new SelectionPredicateMessage(rvMessage);
selectionTracker = new SelectionTracker.Builder<>(
"messages-selection",
rvMessage,
new ItemKeyProviderMessage(rvMessage),
new ItemDetailsLookupMessage(rvMessage),
StorageStrategy.createLongStorage())
.withSelectionPredicate(predicate)
.build();
adapter.setSelectionTracker(selectionTracker);
selectionTracker.addObserver(new SelectionTracker.SelectionObserver() {
@Override
public void onSelectionChanged() {
// Workaround AndroidX bug
FragmentActivity activity = getActivity();
if (activity != null)
try {
ViewModelMessages modelMessages = ViewModelProviders.of(activity).get(ViewModelMessages.class);
if (selectionTracker.hasSelection())
modelMessages.removeObservers(viewType, getViewLifecycleOwner());
else
modelMessages.observe(viewType, getViewLifecycleOwner(), observer);
} catch (IllegalStateException ex) {
// getViewLifecycleOwner
Log.w(ex);
}
if (selectionTracker.hasSelection()) {
swipeRefresh.setEnabled(false);
fabMore.show();
} else {
predicate.clearAccount();
fabMore.hide();
swipeRefresh.setEnabled(pull);
}
}
});
}
new ItemTouchHelper(new ItemTouchHelper.Callback() { private ItemTouchHelper.Callback touchHelper = new ItemTouchHelper.Callback() {
@Override @Override
public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) { public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext());
if (!prefs.getBoolean("swipe", true)) if (!prefs.getBoolean("swipe", true))
return 0; return 0;
@ -607,32 +701,7 @@ public class FragmentMessages extends FragmentBase {
} }
}.execute(FragmentMessages.this, args, "messages:swipe"); }.execute(FragmentMessages.this, args, "messages:swipe");
} }
}).attachToRecyclerView(rvMessage); };
bottom_navigation.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
switch (menuItem.getItemId()) {
case R.id.action_delete:
onActionMove(EntityFolder.TRASH);
return true;
case R.id.action_archive:
onActionMove(EntityFolder.ARCHIVE);
return true;
case R.id.action_prev:
navigate(false);
return true;
case R.id.action_next:
navigate(true);
return true;
default:
return false;
}
}
private void onActionMove(String folderType) { private void onActionMove(String folderType) {
Bundle args = new Bundle(); Bundle args = new Bundle();
@ -689,50 +758,8 @@ public class FragmentMessages extends FragmentBase {
} }
}.execute(FragmentMessages.this, args, "messages:move"); }.execute(FragmentMessages.this, args, "messages:move");
} }
});
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
EntityFolder drafts = (EntityFolder) fab.getTag();
startActivity(new Intent(getContext(), ActivityCompose.class)
.putExtra("action", "new")
.putExtra("account", drafts.account)
);
}
});
fab.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
EntityFolder drafts = (EntityFolder) fab.getTag();
LocalBroadcastManager lbm = LocalBroadcastManager.getInstance(getContext());
lbm.sendBroadcast(
new Intent(ActivityView.ACTION_VIEW_MESSAGES)
.putExtra("account", drafts.account)
.putExtra("folder", drafts.id)
.putExtra("outgoing", drafts.isOutgoing()));
return true;
}
});
fabMore.setOnClickListener(new View.OnClickListener() {
private final int action_seen = 1;
private final int action_unseen = 2;
private final int action_snooze = 3;
private final int action_flag = 4;
private final int action_unflag = 5;
private final int action_archive = 6;
private final int action_trash = 7;
private final int action_delete = 8;
private final int action_junk = 9;
private final int action_move = 10;
@Override private void onMore() {
public void onClick(View v) {
Bundle args = new Bundle(); Bundle args = new Bundle();
args.putLong("folder", folder); args.putLong("folder", folder);
args.putLongArray("ids", getSelection()); args.putLongArray("ids", getSelection());
@ -811,34 +838,34 @@ public class FragmentMessages extends FragmentBase {
public boolean onMenuItemClick(MenuItem target) { public boolean onMenuItemClick(MenuItem target) {
switch (target.getItemId()) { switch (target.getItemId()) {
case action_seen: case action_seen:
onActionSeen(true); onActionSeenSelection(true);
return true; return true;
case action_unseen: case action_unseen:
onActionSeen(false); onActionSeenSelection(false);
return true; return true;
case action_snooze: case action_snooze:
onActionSnooze(); onActionSnoozeSelection();
return true; return true;
case action_flag: case action_flag:
onActionFlag(true); onActionFlagSelection(true);
return true; return true;
case action_unflag: case action_unflag:
onActionFlag(false); onActionFlagSelection(false);
return true; return true;
case action_archive: case action_archive:
onActionMove(EntityFolder.ARCHIVE); onActionMoveSelection(EntityFolder.ARCHIVE);
return true; return true;
case action_trash: case action_trash:
onActionMove(EntityFolder.TRASH); onActionMoveSelection(EntityFolder.TRASH);
return true; return true;
case action_delete: case action_delete:
onActionDelete(); onActionDeleteSelection();
return true; return true;
case action_junk: case action_junk:
onActionJunk(); onActionJunkSelection();
return true; return true;
case action_move: case action_move:
onActionMove(); onActionMoveSelection();
return true; return true;
default: default:
return false; return false;
@ -867,7 +894,7 @@ public class FragmentMessages extends FragmentBase {
return ids; return ids;
} }
private void onActionSeen(boolean seen) { private void onActionSeenSelection(boolean seen) {
Bundle args = new Bundle(); Bundle args = new Bundle();
args.putLongArray("ids", getSelection()); args.putLongArray("ids", getSelection());
args.putBoolean("seen", seen); args.putBoolean("seen", seen);
@ -909,7 +936,7 @@ public class FragmentMessages extends FragmentBase {
}.execute(FragmentMessages.this, args, "messages:seen"); }.execute(FragmentMessages.this, args, "messages:seen");
} }
private void onActionSnooze() { private void onActionSnoozeSelection() {
DialogDuration.show(getContext(), getViewLifecycleOwner(), R.string.title_snooze, DialogDuration.show(getContext(), getViewLifecycleOwner(), R.string.title_snooze,
new DialogDuration.IDialogDuration() { new DialogDuration.IDialogDuration() {
@Override @Override
@ -962,7 +989,7 @@ public class FragmentMessages extends FragmentBase {
}); });
} }
private void onActionFlag(boolean flagged) { private void onActionFlagSelection(boolean flagged) {
Bundle args = new Bundle(); Bundle args = new Bundle();
args.putLongArray("ids", getSelection()); args.putLongArray("ids", getSelection());
args.putBoolean("flagged", flagged); args.putBoolean("flagged", flagged);
@ -1004,20 +1031,7 @@ public class FragmentMessages extends FragmentBase {
}.execute(FragmentMessages.this, args, "messages:flag"); }.execute(FragmentMessages.this, args, "messages:flag");
} }
private void onActionJunk() { private void onActionDeleteSelection() {
new DialogBuilderLifecycle(getContext(), getViewLifecycleOwner())
.setMessage(R.string.title_ask_spam)
.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
onActionMove(EntityFolder.JUNK);
}
})
.setNegativeButton(android.R.string.cancel, null)
.show();
}
private void onActionDelete() {
new DialogBuilderLifecycle(getContext(), getViewLifecycleOwner()) new DialogBuilderLifecycle(getContext(), getViewLifecycleOwner())
.setMessage(R.string.title_ask_delete_selected) .setMessage(R.string.title_ask_delete_selected)
.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
@ -1067,7 +1081,20 @@ public class FragmentMessages extends FragmentBase {
.show(); .show();
} }
private void onActionMove(String type) { private void onActionJunkSelection() {
new DialogBuilderLifecycle(getContext(), getViewLifecycleOwner())
.setMessage(R.string.title_ask_spam)
.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
onActionMoveSelection(EntityFolder.JUNK);
}
})
.setNegativeButton(android.R.string.cancel, null)
.show();
}
private void onActionMoveSelection(String type) {
Bundle args = new Bundle(); Bundle args = new Bundle();
args.putString("type", type); args.putString("type", type);
args.putLongArray("ids", getSelection()); args.putLongArray("ids", getSelection());
@ -1123,7 +1150,7 @@ public class FragmentMessages extends FragmentBase {
}.execute(FragmentMessages.this, args, "messages:move"); }.execute(FragmentMessages.this, args, "messages:move");
} }
private void onActionMove() { private void onActionMoveSelection() {
Bundle args = new Bundle(); Bundle args = new Bundle();
args.putLong("folder", folder); args.putLong("folder", folder);
args.putLongArray("ids", getSelection()); args.putLongArray("ids", getSelection());
@ -1232,22 +1259,6 @@ public class FragmentMessages extends FragmentBase {
} }
}.execute(FragmentMessages.this, args, "messages:move"); }.execute(FragmentMessages.this, args, "messages:move");
} }
});
((ActivityBase) getActivity()).addBackPressedListener(onBackPressedListener);
// Initialize
swipeRefresh.setEnabled(pull);
tvNoEmail.setVisibility(View.GONE);
bottom_navigation.setVisibility(View.GONE);
grpReady.setVisibility(View.GONE);
pbWait.setVisibility(View.VISIBLE);
fab.hide();
fabMore.hide();
return view;
}
@Override @Override
public void onDestroyView() { public void onDestroyView() {

@ -135,6 +135,19 @@ public class FragmentQuickSetup extends FragmentBase {
btnCheck.setOnClickListener(new View.OnClickListener() { btnCheck.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
onCheck();
}
});
// Initialize
tvError.setVisibility(View.GONE);
tvInstructions.setVisibility(View.GONE);
tvInstructions.setMovementMethod(LinkMovementMethod.getInstance());
return view;
}
private void onCheck() {
Bundle args = new Bundle(); Bundle args = new Bundle();
args.putString("name", etName.getText().toString()); args.putString("name", etName.getText().toString());
args.putString("email", etEmail.getText().toString().trim()); args.putString("email", etEmail.getText().toString().trim());
@ -380,15 +393,6 @@ public class FragmentQuickSetup extends FragmentBase {
} }
}.execute(FragmentQuickSetup.this, args, "setup:quick"); }.execute(FragmentQuickSetup.this, args, "setup:quick");
} }
});
// Initialize
tvError.setVisibility(View.GONE);
tvInstructions.setVisibility(View.GONE);
tvInstructions.setMovementMethod(LinkMovementMethod.getInstance());
return view;
}
@Override @Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {

@ -122,6 +122,14 @@ public class FragmentWebView extends FragmentBase {
registerForContextMenu(webview); registerForContextMenu(webview);
onLoad();
((ActivityBase) getActivity()).addBackPressedListener(onBackPressedListener);
return view;
}
private void onLoad() {
Bundle args = getArguments(); Bundle args = getArguments();
if (args.containsKey("url")) { if (args.containsKey("url")) {
String url = args.getString("url"); String url = args.getString("url");
@ -188,10 +196,6 @@ public class FragmentWebView extends FragmentBase {
} }
}.execute(this, args, "webview:format"); }.execute(this, args, "webview:format");
} }
((ActivityBase) getActivity()).addBackPressedListener(onBackPressedListener);
return view;
} }
@Override @Override

Loading…
Cancel
Save