diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationActivity.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationActivity.java
index c9069d15f6..fcccc2dfda 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationActivity.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationActivity.java
@@ -43,6 +43,7 @@ import android.provider.Telephony;
import android.text.Editable;
import android.text.TextUtils;
import android.text.TextWatcher;
+import android.view.Gravity;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuInflater;
@@ -163,6 +164,7 @@ import org.thoughtcrime.securesms.invites.InviteReminderRepository;
import org.thoughtcrime.securesms.jobs.RequestGroupV2InfoJob;
import org.thoughtcrime.securesms.jobs.RetrieveProfileJob;
import org.thoughtcrime.securesms.jobs.ServiceOutageDetectionJob;
+import org.thoughtcrime.securesms.keyvalue.SignalStore;
import org.thoughtcrime.securesms.linkpreview.LinkPreview;
import org.thoughtcrime.securesms.linkpreview.LinkPreviewRepository;
import org.thoughtcrime.securesms.linkpreview.LinkPreviewViewModel;
@@ -872,6 +874,28 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
return false;
}
+ @Override
+ public boolean onMenuOpened(int featureId, Menu menu) {
+ if (menu == null) {
+ return super.onMenuOpened(featureId, null);
+ }
+
+ if (!SignalStore.uiHints().hasSeenGroupSettingsMenuToast()) {
+ MenuItem settingsMenuItem = menu.findItem(R.id.menu_group_settings);
+
+ if (settingsMenuItem != null && settingsMenuItem.isVisible()) {
+ Toast toast = Toast.makeText(this, R.string.ConversationActivity__more_options_now_in_group_settings, Toast.LENGTH_SHORT);
+
+ toast.setGravity(Gravity.CENTER, 0, 0);
+ toast.show();
+
+ SignalStore.uiHints().markHasSeenGroupSettingsMenuToast();
+ }
+ }
+
+ return super.onMenuOpened(featureId, menu);
+ }
+
@Override
public void onBackPressed() {
Log.d(TAG, "onBackPressed()");
diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/managegroup/ManageGroupFragment.java b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/managegroup/ManageGroupFragment.java
index ac05b34a3a..0952a56571 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/managegroup/ManageGroupFragment.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/managegroup/ManageGroupFragment.java
@@ -107,12 +107,6 @@ public class ManageGroupFragment extends Fragment {
return fragment;
}
- @Override
- public void onCreate(@Nullable Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setHasOptionsMenu(true);
- }
-
@Override
public @Nullable View onCreateView(@NonNull LayoutInflater inflater,
@Nullable ViewGroup container,
@@ -188,7 +182,10 @@ public class ManageGroupFragment extends Fragment {
avatar.setFallbackPhotoProvider(fallbackPhotoProvider);
toolbar.setNavigationOnClickListener(v -> requireActivity().finish());
+ toolbar.setOnMenuItemClickListener(this::onMenuItemSelected);
+ toolbar.inflateMenu(R.menu.manage_group_fragment);
+ viewModel.getCanEditGroupAttributes().observe(getViewLifecycleOwner(), canEdit -> toolbar.getMenu().findItem(R.id.action_edit).setVisible(canEdit));
viewModel.getTitle().observe(getViewLifecycleOwner(), toolbar::setTitle);
viewModel.getMemberCountSummary().observe(getViewLifecycleOwner(), memberCountUnderAvatar::setText);
viewModel.getFullMemberCountSummary().observe(getViewLifecycleOwner(), memberCountAboveList::setText);
@@ -306,13 +303,10 @@ public class ManageGroupFragment extends Fragment {
@Override
public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater) {
- inflater.inflate(R.menu.manage_group_fragment, menu);
- viewModel.getCanEditGroupAttributes().observe(getViewLifecycleOwner(), canEdit -> menu.findItem(R.id.action_edit).setVisible(canEdit));
}
- @Override
- public boolean onOptionsItemSelected(@NonNull MenuItem item) {
+ public boolean onMenuItemSelected(@NonNull MenuItem item) {
if (item.getItemId() == R.id.action_edit) {
startActivity(EditProfileActivity.getIntentForGroupProfile(requireActivity(), getPushGroupId()));
return true;
diff --git a/app/src/main/java/org/thoughtcrime/securesms/keyvalue/SignalStore.java b/app/src/main/java/org/thoughtcrime/securesms/keyvalue/SignalStore.java
index 45ee0de8f9..b9e8ff93c8 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/keyvalue/SignalStore.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/keyvalue/SignalStore.java
@@ -11,13 +11,14 @@ import org.thoughtcrime.securesms.logging.SignalUncaughtExceptionHandler;
*/
public final class SignalStore {
- private static final String LAST_PREKEY_REFRESH_TIME = "last_prekey_refresh_time";
- private static final String MESSAGE_REQUEST_ENABLE_TIME = "message_request_enable_time";
+ private static final String LAST_PREKEY_REFRESH_TIME = "last_prekey_refresh_time";
+ private static final String MESSAGE_REQUEST_ENABLE_TIME = "message_request_enable_time";
private SignalStore() {}
public static void onFirstEverAppLaunch() {
registrationValues().onFirstEverAppLaunch();
+ uiHints().onFirstEverAppLaunch();
}
public static @NonNull KbsValues kbsValues() {
@@ -60,6 +61,10 @@ public final class SignalStore {
putLong(MESSAGE_REQUEST_ENABLE_TIME, time);
}
+ public static UiHints uiHints() {
+ return new UiHints(getStore());
+ }
+
public static @NonNull PreferenceDataStore getPreferenceDataStore() {
return new SignalPreferenceDataStore(getStore());
}
diff --git a/app/src/main/java/org/thoughtcrime/securesms/keyvalue/UiHints.java b/app/src/main/java/org/thoughtcrime/securesms/keyvalue/UiHints.java
new file mode 100644
index 0000000000..3a4ad72526
--- /dev/null
+++ b/app/src/main/java/org/thoughtcrime/securesms/keyvalue/UiHints.java
@@ -0,0 +1,24 @@
+package org.thoughtcrime.securesms.keyvalue;
+
+public class UiHints {
+
+ private static final String HAS_SEEN_GROUP_SETTINGS_MENU_TOAST = "uihints.has_seen_group_settings_menu_toast";
+
+ private final KeyValueStore store;
+
+ UiHints(KeyValueStore store) {
+ this.store = store;
+ }
+
+ void onFirstEverAppLaunch() {
+ markHasSeenGroupSettingsMenuToast();
+ }
+
+ public void markHasSeenGroupSettingsMenuToast() {
+ store.beginWrite().putBoolean(HAS_SEEN_GROUP_SETTINGS_MENU_TOAST, true).apply();
+ }
+
+ public boolean hasSeenGroupSettingsMenuToast() {
+ return store.getBoolean(HAS_SEEN_GROUP_SETTINGS_MENU_TOAST, false);
+ }
+}
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 1967494029..b2bb10591b 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -267,6 +267,8 @@
To call %1$s, Signal needs access to your microphone
To call %1$s, Signal needs access to your microphone and camera.
+ More options now in \"Group settings\"
+
- %d unread message