mirror of
https://github.com/M66B/FairEmail.git
synced 2025-12-29 00:51:44 +01:00
Move folders to navigation menu, navigate by account
This commit is contained in:
@@ -38,18 +38,20 @@ import android.support.v4.widget.DrawerLayout;
|
||||
import android.support.v7.app.ActionBarDrawerToggle;
|
||||
import android.util.Log;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuInflater;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.AdapterView;
|
||||
import android.widget.ArrayAdapter;
|
||||
import android.widget.CheckBox;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.ListView;
|
||||
import android.widget.TextView;
|
||||
|
||||
import java.text.Collator;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
|
||||
public class ActivityView extends ActivityBase implements FragmentManager.OnBackStackChangedListener, SharedPreferences.OnSharedPreferenceChangeListener {
|
||||
private boolean newIntent = false;
|
||||
@@ -101,8 +103,8 @@ public class ActivityView extends ActivityBase implements FragmentManager.OnBack
|
||||
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
|
||||
DrawerItem item = (DrawerItem) parent.getAdapter().getItem(position);
|
||||
switch (item.getId()) {
|
||||
case R.string.menu_folders:
|
||||
onMenuFolders();
|
||||
case -1:
|
||||
onMenuFolders((long) item.getData());
|
||||
break;
|
||||
case R.string.menu_setup:
|
||||
onMenuSetup();
|
||||
@@ -115,15 +117,39 @@ public class ActivityView extends ActivityBase implements FragmentManager.OnBack
|
||||
break;
|
||||
}
|
||||
|
||||
if (!item.isCheckable())
|
||||
drawerLayout.closeDrawer(drawerList);
|
||||
drawerLayout.closeDrawer(drawerList);
|
||||
}
|
||||
});
|
||||
|
||||
PreferenceManager.getDefaultSharedPreferences(this).registerOnSharedPreferenceChangeListener(this);
|
||||
getSupportFragmentManager().addOnBackStackChangedListener(this);
|
||||
|
||||
updateDrawer();
|
||||
DB.getInstance(this).account().liveAccounts().observe(this, new Observer<List<EntityAccount>>() {
|
||||
@Override
|
||||
public void onChanged(@Nullable List<EntityAccount> accounts) {
|
||||
ArrayAdapterDrawer drawerArray = new ArrayAdapterDrawer(ActivityView.this, R.layout.item_drawer);
|
||||
|
||||
final Collator collator = Collator.getInstance(Locale.getDefault());
|
||||
collator.setStrength(Collator.SECONDARY); // Case insensitive, process accents etc
|
||||
|
||||
Collections.sort(accounts, new Comparator<EntityAccount>() {
|
||||
@Override
|
||||
public int compare(EntityAccount a1, EntityAccount a2) {
|
||||
return collator.compare(a1.name, a2.name);
|
||||
}
|
||||
});
|
||||
|
||||
for (EntityAccount account : accounts)
|
||||
drawerArray.add(new DrawerItem(-1, R.drawable.baseline_folder_24, account.name, account.id));
|
||||
|
||||
drawerArray.add(new DrawerItem(ActivityView.this, R.drawable.baseline_settings_applications_24, R.string.menu_setup));
|
||||
if (getIntentFAQ().resolveActivity(getPackageManager()) != null)
|
||||
drawerArray.add(new DrawerItem(ActivityView.this, R.drawable.baseline_question_answer_24, R.string.menu_faq));
|
||||
drawerArray.add(new DrawerItem(ActivityView.this, R.drawable.baseline_help_24, R.string.menu_about));
|
||||
|
||||
drawerList.setAdapter(drawerArray);
|
||||
}
|
||||
});
|
||||
|
||||
if (getSupportFragmentManager().getFragments().size() == 0)
|
||||
init();
|
||||
@@ -216,20 +242,6 @@ public class ActivityView extends ActivityBase implements FragmentManager.OnBack
|
||||
init();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onCreateOptionsMenu(Menu menu) {
|
||||
MenuInflater inflater = getMenuInflater();
|
||||
inflater.inflate(R.menu.menu_view, menu);
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onPrepareOptionsMenu(Menu menu) {
|
||||
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
|
||||
menu.findItem(R.id.menu_folders).setVisible(prefs.getBoolean("eula" , false));
|
||||
return super.onPrepareOptionsMenu(menu);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onOptionsItemSelected(MenuItem item) {
|
||||
if (drawerToggle.onOptionsItemSelected(item))
|
||||
@@ -239,9 +251,6 @@ public class ActivityView extends ActivityBase implements FragmentManager.OnBack
|
||||
case android.R.id.home:
|
||||
getSupportFragmentManager().popBackStack();
|
||||
return true;
|
||||
case R.id.menu_folders:
|
||||
onMenuFolders();
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
@@ -280,26 +289,23 @@ public class ActivityView extends ActivityBase implements FragmentManager.OnBack
|
||||
}
|
||||
}
|
||||
|
||||
public void updateDrawer() {
|
||||
ArrayAdapterDrawer drawerArray = new ArrayAdapterDrawer(this, R.layout.item_drawer);
|
||||
drawerArray.add(new DrawerItem(ActivityView.this, R.string.menu_setup));
|
||||
if (getIntentFAQ().resolveActivity(getPackageManager()) != null)
|
||||
drawerArray.add(new DrawerItem(ActivityView.this, R.string.menu_faq));
|
||||
drawerArray.add(new DrawerItem(ActivityView.this, R.string.menu_about));
|
||||
drawerList.setAdapter(drawerArray);
|
||||
}
|
||||
|
||||
private Intent getIntentFAQ() {
|
||||
Intent intent = new Intent(Intent.ACTION_VIEW);
|
||||
intent.setData(Uri.parse("https://github.com/M66B/open-source-email/blob/master/FAQ.md"));
|
||||
return intent;
|
||||
}
|
||||
|
||||
private void onMenuFolders() {
|
||||
private void onMenuFolders(long account) {
|
||||
getSupportFragmentManager().popBackStack("unified" , 0);
|
||||
|
||||
Bundle args = new Bundle();
|
||||
args.putLong("account" , account);
|
||||
|
||||
FragmentFolders fragment = new FragmentFolders();
|
||||
fragment.setArguments(args);
|
||||
|
||||
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
|
||||
fragmentTransaction.replace(R.id.content_frame, new FragmentFolders()).addToBackStack("folders");
|
||||
fragmentTransaction.replace(R.id.content_frame, fragment).addToBackStack("folders");
|
||||
fragmentTransaction.commit();
|
||||
}
|
||||
|
||||
@@ -319,38 +325,29 @@ public class ActivityView extends ActivityBase implements FragmentManager.OnBack
|
||||
|
||||
private class DrawerItem {
|
||||
private int id;
|
||||
private int icon;
|
||||
private String title;
|
||||
private boolean checkable;
|
||||
private boolean checked;
|
||||
private Object data;
|
||||
|
||||
DrawerItem(Context context, int title) {
|
||||
DrawerItem(Context context, int icon, int title) {
|
||||
this.id = title;
|
||||
this.icon = icon;
|
||||
this.title = context.getString(title);
|
||||
this.checkable = false;
|
||||
this.checked = false;
|
||||
}
|
||||
|
||||
DrawerItem(Context context, int title, boolean checked) {
|
||||
this.id = title;
|
||||
this.title = context.getString(title);
|
||||
this.checkable = true;
|
||||
this.checked = checked;
|
||||
DrawerItem(int id, int icon, String title, Object data) {
|
||||
this.id = id;
|
||||
this.icon = icon;
|
||||
this.title = title;
|
||||
this.data = data;
|
||||
}
|
||||
|
||||
public int getId() {
|
||||
return this.id;
|
||||
}
|
||||
|
||||
public String getTitle() {
|
||||
return this.title;
|
||||
}
|
||||
|
||||
public boolean isCheckable() {
|
||||
return this.checkable;
|
||||
}
|
||||
|
||||
public boolean isChecked() {
|
||||
return this.checked;
|
||||
public Object getData() {
|
||||
return this.data;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -372,11 +369,11 @@ public class ActivityView extends ActivityBase implements FragmentManager.OnBack
|
||||
|
||||
DrawerItem item = getItem(position);
|
||||
|
||||
ImageView iv = row.findViewById(R.id.ivItem);
|
||||
TextView tv = row.findViewById(R.id.tvItem);
|
||||
CheckBox cb = row.findViewById(R.id.cbItem);
|
||||
tv.setText(item.getTitle());
|
||||
cb.setVisibility(item.isCheckable() ? View.VISIBLE : View.GONE);
|
||||
cb.setChecked(item.isChecked());
|
||||
|
||||
iv.setImageResource(item.icon);
|
||||
tv.setText(item.title);
|
||||
|
||||
return row;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user