Compose from primary account folders

This commit is contained in:
M66B 2020-03-10 14:39:29 +01:00
parent 4c2d80d21b
commit 407e66ebaa
3 changed files with 80 additions and 57 deletions

View File

@ -329,6 +329,7 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB
protected void onExecuted(Bundle args, EntityAccount account) {
Bundle aargs = new Bundle();
aargs.putLong("account", account == null ? -1 : account.id);
aargs.putBoolean("primary", true);
FragmentBase fragment = new FragmentFolders();
fragment.setArguments(aargs);
init(fragment);

View File

@ -73,13 +73,15 @@ public class FragmentFolders extends FragmentBase {
private Group grpHintActions;
private Group grpHintSync;
private Group grpReady;
private FloatingActionButton fab;
private FloatingActionButton fabAdd;
private FloatingActionButton fabCompose;
private FloatingActionButton fabError;
private boolean cards;
private boolean compact;
private long account;
private boolean primary;
private boolean show_hidden = false;
private String searching = null;
private AdapterFolder adapter;
@ -97,6 +99,7 @@ public class FragmentFolders extends FragmentBase {
// Get arguments
Bundle args = getArguments();
account = args.getLong("account", -1);
primary = args.getBoolean("primary");
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext());
cards = prefs.getBoolean("cards", true);
@ -121,7 +124,8 @@ public class FragmentFolders extends FragmentBase {
grpHintActions = view.findViewById(R.id.grpHintActions);
grpHintSync = view.findViewById(R.id.grpHintSync);
grpReady = view.findViewById(R.id.grpReady);
fab = view.findViewById(R.id.fab);
fabAdd = view.findViewById(R.id.fabAdd);
fabCompose = view.findViewById(R.id.fabCompose);
fabError = view.findViewById(R.id.fabError);
// Wire controls
@ -175,23 +179,55 @@ public class FragmentFolders extends FragmentBase {
adapter = new AdapterFolder(this, account, compact, show_hidden, null);
rvFolder.setAdapter(adapter);
fab.setOnClickListener(new View.OnClickListener() {
fabAdd.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Bundle args = new Bundle();
args.putLong("account", account);
FragmentFolder fragment = new FragmentFolder();
fragment.setArguments(args);
FragmentTransaction fragmentTransaction = getParentFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.content_frame, fragment).addToBackStack("folder");
fragmentTransaction.commit();
}
});
fabCompose.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (account < 0) {
startActivity(new Intent(getContext(), ActivityCompose.class)
.putExtra("action", "new")
.putExtra("account", account)
);
} else {
Bundle args = new Bundle();
args.putLong("account", account);
FragmentFolder fragment = new FragmentFolder();
fragment.setArguments(args);
FragmentTransaction fragmentTransaction = getParentFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.content_frame, fragment).addToBackStack("folder");
fragmentTransaction.commit();
}
startActivity(new Intent(getContext(), ActivityCompose.class)
.putExtra("action", "new")
.putExtra("account", account)
);
}
});
fabCompose.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
new SimpleTask<EntityFolder>() {
@Override
protected EntityFolder onExecute(Context context, Bundle args) {
return DB.getInstance(context).folder().getPrimaryDrafts();
}
@Override
protected void onExecuted(Bundle args, EntityFolder drafts) {
LocalBroadcastManager lbm = LocalBroadcastManager.getInstance(getContext());
lbm.sendBroadcast(
new Intent(ActivityView.ACTION_VIEW_MESSAGES)
.putExtra("account", drafts.account)
.putExtra("folder", drafts.id)
.putExtra("type", drafts.type));
}
@Override
protected void onException(Bundle args, Throwable ex) {
Log.unexpectedError(getParentFragmentManager(), ex);
}
}.execute(FragmentFolders.this, new Bundle(), "folders:drafts");
return true;
}
});
@ -204,36 +240,6 @@ public class FragmentFolders extends FragmentBase {
}
});
if (account < 0)
fab.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
new SimpleTask<EntityFolder>() {
@Override
protected EntityFolder onExecute(Context context, Bundle args) {
return DB.getInstance(context).folder().getPrimaryDrafts();
}
@Override
protected void onExecuted(Bundle args, EntityFolder drafts) {
LocalBroadcastManager lbm = LocalBroadcastManager.getInstance(getContext());
lbm.sendBroadcast(
new Intent(ActivityView.ACTION_VIEW_MESSAGES)
.putExtra("account", drafts.account)
.putExtra("folder", drafts.id)
.putExtra("type", drafts.type));
}
@Override
protected void onException(Bundle args, Throwable ex) {
Log.unexpectedError(getParentFragmentManager(), ex);
}
}.execute(FragmentFolders.this, new Bundle(), "folders:drafts");
return true;
}
});
// Initialize
if (cards && !Helper.isDarkTheme(getContext()))
@ -241,7 +247,8 @@ public class FragmentFolders extends FragmentBase {
grpReady.setVisibility(View.GONE);
pbWait.setVisibility(View.VISIBLE);
fab.hide();
fabAdd.hide();
fabCompose.hide();
fabError.hide();
return view;
@ -267,12 +274,13 @@ public class FragmentFolders extends FragmentBase {
DB db = DB.getInstance(getContext());
if (account < 0 || primary)
fabCompose.show();
// Observe account
if (account < 0) {
if (account < 0)
setSubtitle(R.string.title_folders_unified);
fab.setImageResource(R.drawable.baseline_edit_24);
fab.show();
} else
else
db.account().liveAccount(account).observe(getViewLifecycleOwner(), new Observer<EntityAccount>() {
@Override
public void onChanged(@Nullable EntityAccount account) {
@ -288,10 +296,12 @@ public class FragmentFolders extends FragmentBase {
else
fabError.hide();
if (account == null || account.protocol != EntityAccount.TYPE_IMAP)
fab.hide();
else
fab.show();
if (!primary) {
if (account == null || account.protocol != EntityAccount.TYPE_IMAP)
fabAdd.hide();
else
fabAdd.show();
}
}
});

View File

@ -125,7 +125,7 @@
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/fab"
android:id="@+id/fabAdd"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end|bottom"
@ -136,6 +136,18 @@
app:backgroundTint="?attr/colorFabBackground"
app:srcCompat="@drawable/baseline_create_new_folder_24" />
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/fabCompose"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end|bottom"
android:layout_margin="@dimen/fab_padding"
android:contentDescription="@string/title_compose"
android:tint="?attr/colorFabForeground"
android:tooltipText="@string/title_compose"
app:backgroundTint="?attr/colorFabBackground"
app:srcCompat="@drawable/baseline_edit_24" />
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/fabError"
android:layout_width="wrap_content"