mirror of
https://github.com/M66B/FairEmail.git
synced 2026-04-15 05:23:48 +02:00
Save fragment instance states
This commit is contained in:
@@ -62,11 +62,9 @@ import androidx.constraintlayout.widget.Group;
|
||||
import androidx.lifecycle.Observer;
|
||||
|
||||
public class FragmentAccount extends FragmentEx {
|
||||
private List<Provider> providers;
|
||||
|
||||
private ViewGroup view;
|
||||
private EditText etName;
|
||||
private Spinner spProfile;
|
||||
private Spinner spProvider;
|
||||
private EditText etHost;
|
||||
private EditText etPort;
|
||||
private EditText etUser;
|
||||
@@ -97,12 +95,8 @@ public class FragmentAccount extends FragmentEx {
|
||||
Bundle args = getArguments();
|
||||
final long id = (args == null ? -1 : args.getLong("id", -1));
|
||||
|
||||
// Get providers
|
||||
providers = Provider.loadProfiles(getContext());
|
||||
providers.add(0, new Provider(getString(R.string.title_custom)));
|
||||
|
||||
// Get controls
|
||||
spProfile = view.findViewById(R.id.spProvider);
|
||||
spProvider = view.findViewById(R.id.spProvider);
|
||||
etName = view.findViewById(R.id.etName);
|
||||
etHost = view.findViewById(R.id.etHost);
|
||||
etPort = view.findViewById(R.id.etPort);
|
||||
@@ -125,10 +119,15 @@ public class FragmentAccount extends FragmentEx {
|
||||
|
||||
// Wire controls
|
||||
|
||||
spProfile.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
|
||||
spProvider.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
|
||||
@Override
|
||||
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
|
||||
Provider provider = providers.get(position);
|
||||
public void onItemSelected(AdapterView<?> adapterView, View view, int position, long id) {
|
||||
Integer tag = (Integer) adapterView.getTag();
|
||||
if (tag != null && tag.equals(position))
|
||||
return;
|
||||
adapterView.setTag(position);
|
||||
|
||||
Provider provider = (Provider) adapterView.getSelectedItem();
|
||||
if (provider.imap_port != 0) {
|
||||
etName.setText(provider.name);
|
||||
etHost.setText(provider.imap_host);
|
||||
@@ -142,10 +141,6 @@ public class FragmentAccount extends FragmentEx {
|
||||
}
|
||||
});
|
||||
|
||||
ArrayAdapter<Provider> adapter = new ArrayAdapter<>(getContext(), R.layout.spinner_item, providers);
|
||||
adapter.setDropDownViewResource(R.layout.spinner_dropdown_item);
|
||||
spProfile.setAdapter(adapter);
|
||||
|
||||
cbSynchronize.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
|
||||
@Override
|
||||
public void onCheckedChanged(CompoundButton compoundButton, boolean checked) {
|
||||
@@ -370,11 +365,11 @@ public class FragmentAccount extends FragmentEx {
|
||||
args.putString("password", tilPassword.getEditText().getText().toString());
|
||||
args.putBoolean("synchronize", cbSynchronize.isChecked());
|
||||
args.putBoolean("primary", cbPrimary.isChecked());
|
||||
args.putSerializable("drafts", drafts);
|
||||
args.putSerializable("sent", sent);
|
||||
args.putSerializable("all", all);
|
||||
args.putSerializable("trash", trash);
|
||||
args.putSerializable("junk", junk);
|
||||
args.putParcelable("drafts", drafts);
|
||||
args.putParcelable("sent", sent);
|
||||
args.putParcelable("all", all);
|
||||
args.putParcelable("trash", trash);
|
||||
args.putParcelable("junk", junk);
|
||||
|
||||
new SimpleTask<Void>() {
|
||||
@Override
|
||||
@@ -385,11 +380,11 @@ public class FragmentAccount extends FragmentEx {
|
||||
String user = args.getString("user");
|
||||
String password = args.getString("password");
|
||||
boolean synchronize = args.getBoolean("synchronize");
|
||||
EntityFolder drafts = (EntityFolder) args.getSerializable("drafts");
|
||||
EntityFolder sent = (EntityFolder) args.getSerializable("sent");
|
||||
EntityFolder all = (EntityFolder) args.getSerializable("all");
|
||||
EntityFolder trash = (EntityFolder) args.getSerializable("trash");
|
||||
EntityFolder junk = (EntityFolder) args.getSerializable("junk");
|
||||
EntityFolder drafts = args.getParcelable("drafts");
|
||||
EntityFolder sent = args.getParcelable("sent");
|
||||
EntityFolder all = args.getParcelable("all");
|
||||
EntityFolder trash = args.getParcelable("trash");
|
||||
EntityFolder junk = args.getParcelable("junk");
|
||||
|
||||
if (TextUtils.isEmpty(host))
|
||||
throw new Throwable(getContext().getString(R.string.title_no_host));
|
||||
@@ -484,7 +479,7 @@ public class FragmentAccount extends FragmentEx {
|
||||
}
|
||||
|
||||
for (EntityFolder folder : folders) {
|
||||
db.folder().setFolderUser(folder.type);
|
||||
db.folder().setFolderUser(folder.account, folder.type);
|
||||
EntityFolder existing = db.folder().getFolderByName(account.id, folder.name);
|
||||
if (existing == null) {
|
||||
folder.account = account.id;
|
||||
@@ -585,7 +580,31 @@ public class FragmentAccount extends FragmentEx {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
|
||||
public void onSaveInstanceState(Bundle outState) {
|
||||
outState.putInt("provider", spProvider.getSelectedItemPosition());
|
||||
outState.putString("password", tilPassword.getEditText().getText().toString());
|
||||
|
||||
boolean checked = (btnSave.getVisibility() == View.VISIBLE);
|
||||
outState.putBoolean("checked", checked);
|
||||
|
||||
if (checked) {
|
||||
ArrayList<EntityFolder> folders = new ArrayList<>();
|
||||
for (int i = 0; i < spDrafts.getAdapter().getCount(); i++)
|
||||
folders.add((EntityFolder) spDrafts.getAdapter().getItem(i));
|
||||
|
||||
outState.putParcelableArrayList("folders", folders);
|
||||
outState.putInt("drafts", spDrafts.getSelectedItemPosition());
|
||||
outState.putInt("sent", spSent.getSelectedItemPosition());
|
||||
outState.putInt("all", spAll.getSelectedItemPosition());
|
||||
outState.putInt("trash", spTrash.getSelectedItemPosition());
|
||||
outState.putInt("junk", spJunk.getSelectedItemPosition());
|
||||
}
|
||||
|
||||
super.onSaveInstanceState(outState);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onActivityCreated(@Nullable final Bundle savedInstanceState) {
|
||||
super.onActivityCreated(savedInstanceState);
|
||||
|
||||
// Get arguments
|
||||
@@ -596,23 +615,64 @@ public class FragmentAccount extends FragmentEx {
|
||||
DB.getInstance(getContext()).account().liveAccount(id).observe(getViewLifecycleOwner(), new Observer<EntityAccount>() {
|
||||
@Override
|
||||
public void onChanged(@Nullable EntityAccount account) {
|
||||
// Get providers
|
||||
List<Provider> providers = Provider.loadProfiles(getContext());
|
||||
providers.add(0, new Provider(getString(R.string.title_custom)));
|
||||
|
||||
ArrayAdapter<Provider> padapter = new ArrayAdapter<>(getContext(), R.layout.spinner_item, providers);
|
||||
padapter.setDropDownViewResource(R.layout.spinner_dropdown_item);
|
||||
spProvider.setAdapter(padapter);
|
||||
|
||||
if (savedInstanceState == null) {
|
||||
etName.setText(account == null ? null : account.name);
|
||||
etHost.setText(account == null ? null : account.host);
|
||||
etPort.setText(account == null ? null : Long.toString(account.port));
|
||||
etUser.setText(account == null ? null : account.user);
|
||||
tilPassword.getEditText().setText(account == null ? null : account.password);
|
||||
cbSynchronize.setChecked(account == null ? true : account.synchronize);
|
||||
cbPrimary.setChecked(account == null ? true : account.primary);
|
||||
cbPrimary.setEnabled(account == null ? true : account.synchronize);
|
||||
} else {
|
||||
int provider = savedInstanceState.getInt("provider");
|
||||
spProvider.setTag(provider);
|
||||
spProvider.setSelection(provider);
|
||||
|
||||
tilPassword.getEditText().setText(savedInstanceState.getString("password"));
|
||||
}
|
||||
|
||||
Helper.setViewsEnabled(view, true);
|
||||
|
||||
etName.setText(account == null ? null : account.name);
|
||||
etHost.setText(account == null ? null : account.host);
|
||||
etPort.setText(account == null ? null : Long.toString(account.port));
|
||||
etUser.setText(account == null ? null : account.user);
|
||||
tilPassword.getEditText().setText(account == null ? null : account.password);
|
||||
cbSynchronize.setChecked(account == null ? true : account.synchronize);
|
||||
cbPrimary.setChecked(account == null ? true : account.primary);
|
||||
cbPrimary.setEnabled(account == null ? true : account.synchronize);
|
||||
ibDelete.setVisibility(account == null ? View.GONE : View.VISIBLE);
|
||||
|
||||
btnCheck.setVisibility(account == null || account.synchronize ? View.VISIBLE : View.GONE);
|
||||
btnSave.setVisibility(account == null || account.synchronize ? View.GONE : View.VISIBLE);
|
||||
btnCheck.setVisibility(cbSynchronize.isChecked() ? View.VISIBLE : View.GONE);
|
||||
btnSave.setVisibility(cbSynchronize.isChecked() ? View.GONE : View.VISIBLE);
|
||||
|
||||
btnCheck.setEnabled(true);
|
||||
pbWait.setVisibility(View.GONE);
|
||||
|
||||
if (savedInstanceState != null) {
|
||||
boolean checked = savedInstanceState.getBoolean("checked");
|
||||
if (checked) {
|
||||
List<EntityFolder> folders = savedInstanceState.getParcelableArrayList("folders");
|
||||
|
||||
ArrayAdapter<EntityFolder> adapter = new ArrayAdapter<>(getContext(), R.layout.spinner_item, folders);
|
||||
adapter.setDropDownViewResource(R.layout.spinner_dropdown_item);
|
||||
|
||||
spDrafts.setAdapter(adapter);
|
||||
spSent.setAdapter(adapter);
|
||||
spAll.setAdapter(adapter);
|
||||
spTrash.setAdapter(adapter);
|
||||
spJunk.setAdapter(adapter);
|
||||
|
||||
spDrafts.setSelection(savedInstanceState.getInt("drafts"));
|
||||
spSent.setSelection(savedInstanceState.getInt("sent"));
|
||||
spAll.setSelection(savedInstanceState.getInt("all"));
|
||||
spTrash.setSelection(savedInstanceState.getInt("trash"));
|
||||
spJunk.setSelection(savedInstanceState.getInt("junk"));
|
||||
grpFolders.setVisibility(View.VISIBLE);
|
||||
btnSave.setVisibility(View.VISIBLE);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user