Improved show/hide hidden folders

pull/149/head
M66B 6 years ago
parent 7bcd1a3286
commit 2a380d1087

@ -447,14 +447,11 @@ public class AdapterFolder extends RecyclerView.Adapter<AdapterFolder.ViewHolder
setHasStableIds(true);
}
private boolean showAll = false;
void showHidden(boolean show) {
showAll = show;
set(account, all);
set(account, show, all);
}
public void set(long account, @NonNull List<TupleFolderEx> _folders) {
public void set(long account, boolean showAll, @NonNull List<TupleFolderEx> _folders) {
Log.i("Set account=" + account + " folders=" + _folders.size());
this.account = account;

@ -23,11 +23,12 @@ import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.PreferenceManager;
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.CompoundButton;
import android.widget.ImageButton;
import android.widget.ToggleButton;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
@ -44,7 +45,6 @@ import androidx.recyclerview.widget.RecyclerView;
public class FragmentFolders extends FragmentBase {
private ImageButton ibHintActions;
private ImageButton ibHintSync;
private ToggleButton tbShowHidden;
private RecyclerView rvFolder;
private ContentLoadingProgressBar pbWait;
private Group grpHintActions;
@ -55,6 +55,8 @@ public class FragmentFolders extends FragmentBase {
private long account;
private AdapterFolder adapter;
private Boolean show_hidden = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@ -68,11 +70,11 @@ public class FragmentFolders extends FragmentBase {
@Nullable
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_folders, container, false);
setHasOptionsMenu(true);
// Get controls
ibHintActions = view.findViewById(R.id.ibHintActions);
ibHintSync = view.findViewById(R.id.ibHintSync);
tbShowHidden = view.findViewById(R.id.tbShowHidden);
rvFolder = view.findViewById(R.id.rvFolder);
pbWait = view.findViewById(R.id.pbWait);
grpHintActions = view.findViewById(R.id.grpHintActions);
@ -100,13 +102,6 @@ public class FragmentFolders extends FragmentBase {
}
});
tbShowHidden.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
adapter.showHidden(isChecked);
}
});
rvFolder.setHasFixedSize(false);
LinearLayoutManager llm = new LinearLayoutManager(getContext());
rvFolder.setLayoutManager(llm);
@ -128,7 +123,6 @@ public class FragmentFolders extends FragmentBase {
});
// Initialize
tbShowHidden.setVisibility(View.GONE);
grpReady.setVisibility(View.GONE);
pbWait.setVisibility(View.VISIBLE);
fab.hide();
@ -136,10 +130,22 @@ public class FragmentFolders extends FragmentBase {
return view;
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
if (show_hidden != null)
outState.putBoolean("show_hidden", show_hidden);
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
if (savedInstanceState != null) {
show_hidden = (Boolean) savedInstanceState.get("show_hidden");
getActivity().invalidateOptionsMenu();
}
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext());
grpHintActions.setVisibility(prefs.getBoolean("folder_actions", false) ? View.GONE : View.VISIBLE);
grpHintSync.setVisibility(prefs.getBoolean("folder_sync", false) ? View.GONE : View.VISIBLE);
@ -170,19 +176,67 @@ public class FragmentFolders extends FragmentBase {
return;
}
boolean hidden = false;
boolean has_hidden = false;
for (TupleFolderEx folder : folders)
if (folder.hide) {
hidden = true;
has_hidden = true;
break;
}
tbShowHidden.setVisibility(hidden ? View.VISIBLE : View.GONE);
adapter.set(account, folders);
if (has_hidden) {
if (show_hidden == null) {
show_hidden = false;
getActivity().invalidateOptionsMenu();
}
} else {
if (show_hidden != null) {
show_hidden = null;
getActivity().invalidateOptionsMenu();
}
}
adapter.set(account, show_hidden == null || show_hidden, folders);
pbWait.setVisibility(View.GONE);
grpReady.setVisibility(View.VISIBLE);
}
});
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.menu_folders, menu);
super.onCreateOptionsMenu(menu, inflater);
}
@Override
public void onPrepareOptionsMenu(Menu menu) {
MenuItem item = menu.findItem(R.id.menu_show_hidden);
if (show_hidden != null) {
item.setTitle(show_hidden ? R.string.title_hide_folders : R.string.title_show_folders);
item.setIcon(show_hidden ? R.drawable.baseline_visibility_off_24 : R.drawable.baseline_visibility_24);
}
item.setVisible(show_hidden != null);
super.onPrepareOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_show_hidden:
onMenuShowHidden();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
private void onMenuShowHidden() {
if (show_hidden == null)
show_hidden = false;
else
show_hidden = !show_hidden;
getActivity().invalidateOptionsMenu();
adapter.showHidden(show_hidden);
}
}

@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/white"
android:pathData="M12,7c2.76,0 5,2.24 5,5 0,0.65 -0.13,1.26 -0.36,1.83l2.92,2.92c1.51,-1.26 2.7,-2.89 3.43,-4.75 -1.73,-4.39 -6,-7.5 -11,-7.5 -1.4,0 -2.74,0.25 -3.98,0.7l2.16,2.16C10.74,7.13 11.35,7 12,7zM2,4.27l2.28,2.28 0.46,0.46C3.08,8.3 1.78,10.02 1,12c1.73,4.39 6,7.5 11,7.5 1.55,0 3.03,-0.3 4.38,-0.84l0.42,0.42L19.73,22 21,20.73 3.27,3 2,4.27zM7.53,9.8l1.55,1.55c-0.05,0.21 -0.08,0.43 -0.08,0.65 0,1.66 1.34,3 3,3 0.22,0 0.44,-0.03 0.65,-0.08l1.55,1.55c-0.67,0.33 -1.41,0.53 -2.2,0.53 -2.76,0 -5,-2.24 -5,-5 0,-0.79 0.2,-1.53 0.53,-2.2zM11.84,9.02l3.15,3.15 0.02,-0.16c0,-1.66 -1.34,-3 -3,-3l-0.17,0.01z"/>
</vector>

@ -79,19 +79,6 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvHintSync" />
<ToggleButton
android:id="@+id/tbShowHidden"
style="@style/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:minWidth="0dp"
android:minHeight="0dp"
android:textOff="@string/title_show_folders"
android:textOn="@string/title_hide_folders"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/vSeparatorSync" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rvFolder"
android:layout_width="0dp"
@ -101,7 +88,7 @@
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tbShowHidden" />
app:layout_constraintTop_toBottomOf="@id/vSeparatorSync" />
<eu.faircode.email.ContentLoadingProgressBar
android:id="@+id/pbWait"

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/menu_show_hidden"
android:icon="@drawable/baseline_visibility_24"
android:title="@string/title_show_folders"
app:showAsAction="always" />
</menu>
Loading…
Cancel
Save