Ask save changes standard reply

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

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

@ -35,6 +35,7 @@ import com.google.android.material.bottomnavigation.BottomNavigationView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.constraintlayout.widget.Group;
import androidx.lifecycle.Lifecycle;
import androidx.lifecycle.Observer;
public class FragmentAnswer extends FragmentEx {
@ -84,6 +85,8 @@ public class FragmentAnswer extends FragmentEx {
}
});
((ActivityBase) getActivity()).addBackPressedListener(onBackPressedListener);
// Initialize
grpReady.setVisibility(View.GONE);
pbWait.setVisibility(View.VISIBLE);
@ -91,6 +94,12 @@ public class FragmentAnswer extends FragmentEx {
return view;
}
@Override
public void onDestroyView() {
((ActivityBase) getActivity()).removeBackPressedListener(onBackPressedListener);
super.onDestroyView();
}
@Override
public void onActivityCreated(@Nullable final Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
@ -187,4 +196,31 @@ public class FragmentAnswer extends FragmentEx {
}
}.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() {
@Override
public boolean onBackPressed() {
handleExit();
return true;
}
});
((ActivityBase) getActivity()).addBackPressedListener(onBackPressedListener);
setHasOptionsMenu(true);
@ -372,6 +366,8 @@ public class FragmentCompose extends FragmentEx {
if (pgpService != null)
pgpService.unbindFromService();
((ActivityBase) getActivity()).removeBackPressedListener(onBackPressedListener);
super.onDestroyView();
}
@ -1731,4 +1727,12 @@ public class FragmentCompose extends FragmentEx {
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() {
@Override
public boolean onBackPressed() {
if (selectionTracker != null && selectionTracker.hasSelection()) {
selectionTracker.clearSelection();
return true;
}
return false;
}
});
((ActivityBase) getActivity()).addBackPressedListener(onBackPressedListener);
// Initialize
tvNoEmail.setVisibility(View.GONE);
@ -778,6 +769,12 @@ public class FragmentMessages extends FragmentEx {
return view;
}
@Override
public void onDestroyView() {
((ActivityBase) getActivity()).removeBackPressedListener(onBackPressedListener);
super.onDestroyView();
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
@ -1329,4 +1326,15 @@ public class FragmentMessages extends FragmentEx {
}
}.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
public class FragmentWebView extends FragmentEx {
private ProgressBar progressBar;
private WebView webview;
@Override
@Nullable
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_webview, container, false);
final ProgressBar progressBar = view.findViewById(R.id.progressbar);
final WebView webview = view.findViewById(R.id.webview);
progressBar = view.findViewById(R.id.progressbar);
webview = view.findViewById(R.id.webview);
progressBar.setProgress(0);
progressBar.setVisibility(View.VISIBLE);
@ -105,21 +108,29 @@ public class FragmentWebView extends FragmentEx {
}.load(this, args);
}
((ActivityBase) getActivity()).addBackPressedListener(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;
}
});
((ActivityBase) getActivity()).addBackPressedListener(onBackPressedListener);
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_answer">Delete reply template permanently?</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_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>

Loading…
Cancel
Save