Ask save changes standard reply

pull/146/head
M66B 7 years ago
parent 691eb212b4
commit eecd3c10dd

@ -97,6 +97,10 @@ abstract class ActivityBase extends AppCompatActivity implements SharedPreferenc
backPressedListeners.add(listener); backPressedListeners.add(listener);
} }
public void removeBackPressedListener(IBackPressedListener listener) {
backPressedListeners.remove(listener);
}
@Override @Override
public void onBackPressed() { public void onBackPressed() {
for (IBackPressedListener listener : backPressedListeners) for (IBackPressedListener listener : backPressedListeners)

@ -35,6 +35,7 @@ import com.google.android.material.bottomnavigation.BottomNavigationView;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.constraintlayout.widget.Group; import androidx.constraintlayout.widget.Group;
import androidx.lifecycle.Lifecycle;
import androidx.lifecycle.Observer; import androidx.lifecycle.Observer;
public class FragmentAnswer extends FragmentEx { public class FragmentAnswer extends FragmentEx {
@ -84,6 +85,8 @@ public class FragmentAnswer extends FragmentEx {
} }
}); });
((ActivityBase) getActivity()).addBackPressedListener(onBackPressedListener);
// Initialize // Initialize
grpReady.setVisibility(View.GONE); grpReady.setVisibility(View.GONE);
pbWait.setVisibility(View.VISIBLE); pbWait.setVisibility(View.VISIBLE);
@ -91,6 +94,12 @@ public class FragmentAnswer extends FragmentEx {
return view; return view;
} }
@Override
public void onDestroyView() {
((ActivityBase) getActivity()).removeBackPressedListener(onBackPressedListener);
super.onDestroyView();
}
@Override @Override
public void onActivityCreated(@Nullable final Bundle savedInstanceState) { public void onActivityCreated(@Nullable final Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState); super.onActivityCreated(savedInstanceState);
@ -187,4 +196,31 @@ public class FragmentAnswer extends FragmentEx {
} }
}.load(this, args); }.load(this, args);
} }
private void handleExit() {
if (getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.RESUMED))
new DialogBuilderLifecycle(getContext(), getViewLifecycleOwner())
.setMessage(R.string.title_ask_save)
.setPositiveButton(R.string.title_yes, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
onActionSave();
}
})
.setNegativeButton(R.string.title_no, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
finish();
}
})
.show();
}
ActivityBase.IBackPressedListener onBackPressedListener = new ActivityBase.IBackPressedListener() {
@Override
public boolean onBackPressed() {
handleExit();
return true;
}
};
} }

@ -263,13 +263,7 @@ public class FragmentCompose extends FragmentEx {
} }
}); });
((ActivityBase) getActivity()).addBackPressedListener(new ActivityBase.IBackPressedListener() { ((ActivityBase) getActivity()).addBackPressedListener(onBackPressedListener);
@Override
public boolean onBackPressed() {
handleExit();
return true;
}
});
setHasOptionsMenu(true); setHasOptionsMenu(true);
@ -372,6 +366,8 @@ public class FragmentCompose extends FragmentEx {
if (pgpService != null) if (pgpService != null)
pgpService.unbindFromService(); pgpService.unbindFromService();
((ActivityBase) getActivity()).removeBackPressedListener(onBackPressedListener);
super.onDestroyView(); super.onDestroyView();
} }
@ -1731,4 +1727,12 @@ public class FragmentCompose extends FragmentEx {
return view; return view;
} }
} }
private ActivityBase.IBackPressedListener onBackPressedListener = new ActivityBase.IBackPressedListener() {
@Override
public boolean onBackPressed() {
handleExit();
return true;
}
};
} }

@ -754,16 +754,7 @@ public class FragmentMessages extends FragmentEx {
} }
}); });
((ActivityBase) getActivity()).addBackPressedListener(new ActivityBase.IBackPressedListener() { ((ActivityBase) getActivity()).addBackPressedListener(onBackPressedListener);
@Override
public boolean onBackPressed() {
if (selectionTracker != null && selectionTracker.hasSelection()) {
selectionTracker.clearSelection();
return true;
}
return false;
}
});
// Initialize // Initialize
tvNoEmail.setVisibility(View.GONE); tvNoEmail.setVisibility(View.GONE);
@ -778,6 +769,12 @@ public class FragmentMessages extends FragmentEx {
return view; return view;
} }
@Override
public void onDestroyView() {
((ActivityBase) getActivity()).removeBackPressedListener(onBackPressedListener);
super.onDestroyView();
}
@Override @Override
public void onSaveInstanceState(Bundle outState) { public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState); super.onSaveInstanceState(outState);
@ -1329,4 +1326,15 @@ public class FragmentMessages extends FragmentEx {
} }
}.load(this, args); }.load(this, args);
} }
ActivityBase.IBackPressedListener onBackPressedListener = new ActivityBase.IBackPressedListener() {
@Override
public boolean onBackPressed() {
if (selectionTracker != null && selectionTracker.hasSelection()) {
selectionTracker.clearSelection();
return true;
}
return false;
}
};
} }

@ -39,13 +39,16 @@ import androidx.annotation.Nullable;
// https://developer.android.com/reference/android/webkit/WebView // https://developer.android.com/reference/android/webkit/WebView
public class FragmentWebView extends FragmentEx { public class FragmentWebView extends FragmentEx {
private ProgressBar progressBar;
private WebView webview;
@Override @Override
@Nullable @Nullable
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_webview, container, false); View view = inflater.inflate(R.layout.fragment_webview, container, false);
final ProgressBar progressBar = view.findViewById(R.id.progressbar); progressBar = view.findViewById(R.id.progressbar);
final WebView webview = view.findViewById(R.id.webview); webview = view.findViewById(R.id.webview);
progressBar.setProgress(0); progressBar.setProgress(0);
progressBar.setVisibility(View.VISIBLE); progressBar.setVisibility(View.VISIBLE);
@ -105,21 +108,29 @@ public class FragmentWebView extends FragmentEx {
}.load(this, args); }.load(this, args);
} }
((ActivityBase) getActivity()).addBackPressedListener(new ActivityBase.IBackPressedListener() { ((ActivityBase) getActivity()).addBackPressedListener(onBackPressedListener);
@Override
public boolean onBackPressed() {
boolean can = webview.canGoBack();
if (can)
webview.goBack();
Bundle args = getArguments();
if (args.containsKey("from") && !webview.canGoBack())
setSubtitle(args.getString("from"));
return can;
}
});
return view; return view;
} }
@Override
public void onDestroyView() {
((ActivityBase) getActivity()).removeBackPressedListener(onBackPressedListener);
super.onDestroyView();
}
ActivityBase.IBackPressedListener onBackPressedListener = new ActivityBase.IBackPressedListener() {
@Override
public boolean onBackPressed() {
boolean can = webview.canGoBack();
if (can)
webview.goBack();
Bundle args = getArguments();
if (args.containsKey("from") && !webview.canGoBack())
setSubtitle(args.getString("from"));
return can;
}
};
} }

@ -223,6 +223,7 @@
<string name="title_ask_delete_selected">Delete selected messages permanently?</string> <string name="title_ask_delete_selected">Delete selected messages permanently?</string>
<string name="title_ask_delete_answer">Delete reply template permanently?</string> <string name="title_ask_delete_answer">Delete reply template permanently?</string>
<string name="title_ask_discard">Discard draft?</string> <string name="title_ask_discard">Discard draft?</string>
<string name="title_ask_save">Save changes?</string>
<string name="title_ask_spam">Report message as spam?</string> <string name="title_ask_spam">Report message as spam?</string>
<string name="title_ask_show_html">Showing the original message can leak privacy sensitive information</string> <string name="title_ask_show_html">Showing the original message can leak privacy sensitive information</string>
<string name="title_ask_show_image">Showing images can leak privacy sensitive information</string> <string name="title_ask_show_image">Showing images can leak privacy sensitive information</string>

Loading…
Cancel
Save