forked from mirror/monocles_chat_clean
update fork #128
3 changed files with 132 additions and 82 deletions
Add menu option to show/hide stories
commit
dad737eec3
|
|
@ -35,6 +35,7 @@ import static androidx.recyclerview.widget.ItemTouchHelper.RIGHT;
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.app.Fragment;
|
import android.app.Fragment;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
|
import android.content.SharedPreferences;
|
||||||
import android.graphics.Canvas;
|
import android.graphics.Canvas;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
|
@ -52,6 +53,7 @@ import android.widget.PopupMenu;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.databinding.DataBindingUtil;
|
import androidx.databinding.DataBindingUtil;
|
||||||
|
import androidx.preference.PreferenceManager;
|
||||||
import androidx.recyclerview.widget.ItemTouchHelper;
|
import androidx.recyclerview.widget.ItemTouchHelper;
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||||
import androidx.recyclerview.widget.RecyclerView;
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
|
|
@ -379,24 +381,34 @@ public class ConversationsOverviewFragment extends XmppFragment implements XmppC
|
||||||
return binding.getRoot();
|
return binding.getRoot();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCreateOptionsMenu(Menu menu, MenuInflater menuInflater) {
|
public void onCreateOptionsMenu(Menu menu, MenuInflater menuInflater) {
|
||||||
menuInflater.inflate(R.menu.fragment_conversations_overview, menu);
|
menuInflater.inflate(R.menu.fragment_conversations_overview, menu);
|
||||||
AccountUtils.showHideMenuItems(menu);
|
AccountUtils.showHideMenuItems(menu);
|
||||||
final MenuItem easyOnboardInvite = menu.findItem(R.id.action_easy_invite);
|
final MenuItem easyOnboardInvite = menu.findItem(R.id.action_easy_invite);
|
||||||
MenuItem noteToSelf = menu.findItem(R.id.action_note_to_self);
|
MenuItem noteToSelf = menu.findItem(R.id.action_note_to_self);
|
||||||
easyOnboardInvite.setVisible(EasyOnboardingInvite.anyHasSupport(activity == null ? null : activity.xmppConnectionService));
|
easyOnboardInvite.setVisible(EasyOnboardingInvite.anyHasSupport(activity == null ? null : activity.xmppConnectionService));
|
||||||
if (activity != null && activity.xmppConnectionService != null && activity.xmppConnectionService.isOnboarding()) {
|
if (activity != null && activity.xmppConnectionService != null && activity.xmppConnectionService.isOnboarding()) {
|
||||||
final MenuItem manageAccounts = menu.findItem(R.id.action_accounts);
|
final MenuItem manageAccounts = menu.findItem(R.id.action_accounts);
|
||||||
if (manageAccounts != null) manageAccounts.setVisible(false);
|
if (manageAccounts != null) manageAccounts.setVisible(false);
|
||||||
|
|
||||||
final MenuItem settings = menu.findItem(R.id.action_settings);
|
final MenuItem settings = menu.findItem(R.id.action_settings);
|
||||||
if (settings != null) settings.setVisible(false);
|
if (settings != null) settings.setVisible(false);
|
||||||
}
|
}
|
||||||
if (activity == null || activity.xmppConnectionService == null || activity.xmppConnectionService.getAccounts().size() != 1) {
|
if (activity == null || activity.xmppConnectionService == null || activity.xmppConnectionService.getAccounts().size() != 1) {
|
||||||
noteToSelf.setVisible(false);
|
noteToSelf.setVisible(false);
|
||||||
}
|
}
|
||||||
}
|
final MenuItem stories = menu.findItem(R.id.action_toggle_stories);
|
||||||
|
if (stories != null) {
|
||||||
|
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getActivity());
|
||||||
|
boolean show = preferences.getBoolean("show_stories", true);
|
||||||
|
if (show) {
|
||||||
|
stories.setTitle(R.string.hide_stories);
|
||||||
|
} else {
|
||||||
|
stories.setTitle(R.string.show_stories);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCreateContextMenu(ContextMenu menu, View view, ContextMenu.ContextMenuInfo menuInfo) {
|
public void onCreateContextMenu(ContextMenu menu, View view, ContextMenu.ContextMenuInfo menuInfo) {
|
||||||
|
|
@ -508,11 +520,22 @@ public class ConversationsOverviewFragment extends XmppFragment implements XmppC
|
||||||
boolean navBarVisible = activity instanceof ConversationsActivity && ((ConversationsActivity) activity).navigationBarVisible();
|
boolean navBarVisible = activity instanceof ConversationsActivity && ((ConversationsActivity) activity).navigationBarVisible();
|
||||||
MenuItem manageAccount = menu.findItem(R.id.action_account);
|
MenuItem manageAccount = menu.findItem(R.id.action_account);
|
||||||
MenuItem manageAccounts = menu.findItem(R.id.action_accounts);
|
MenuItem manageAccounts = menu.findItem(R.id.action_accounts);
|
||||||
|
MenuItem addStory = menu.findItem(R.id.action_add_story);
|
||||||
if (navBarVisible) {
|
if (navBarVisible) {
|
||||||
manageAccount.setVisible(false);
|
manageAccount.setVisible(false);
|
||||||
manageAccounts.setVisible(false);
|
manageAccounts.setVisible(false);
|
||||||
|
if (stories != null) {
|
||||||
|
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getActivity());
|
||||||
|
boolean show = preferences.getBoolean("show_stories", true);
|
||||||
|
if (show) {
|
||||||
|
addStory.setVisible(true);
|
||||||
|
} else {
|
||||||
|
addStory.setVisible(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
AccountUtils.showHideMenuItems(menu);
|
AccountUtils.showHideMenuItems(menu);
|
||||||
|
addStory.setVisible(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -528,9 +551,19 @@ public class ConversationsOverviewFragment extends XmppFragment implements XmppC
|
||||||
|
|
||||||
if (showed) {
|
if (showed) {
|
||||||
this.binding.fab.setVisibility(View.GONE);
|
this.binding.fab.setVisibility(View.GONE);
|
||||||
|
binding.fabStory.setVisibility(View.GONE);
|
||||||
} else {
|
} else {
|
||||||
this.binding.fab.setVisibility(View.VISIBLE);
|
this.binding.fab.setVisibility(View.VISIBLE);
|
||||||
}
|
if (stories != null) {
|
||||||
|
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getActivity());
|
||||||
|
boolean show = preferences.getBoolean("show_stories", true);
|
||||||
|
if (show) {
|
||||||
|
this.binding.fabStory.setVisibility(View.VISIBLE);
|
||||||
|
} else {
|
||||||
|
this.binding.fabStory.setVisibility(View.GONE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -540,30 +573,46 @@ public class ConversationsOverviewFragment extends XmppFragment implements XmppC
|
||||||
Log.d(Config.LOGTAG, "ConversationsOverviewFragment.onResume()");
|
Log.d(Config.LOGTAG, "ConversationsOverviewFragment.onResume()");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onOptionsItemSelected(final MenuItem item) {
|
public boolean onOptionsItemSelected(final MenuItem item) {
|
||||||
if (MenuDoubleTabUtil.shouldIgnoreTap()) {
|
if (MenuDoubleTabUtil.shouldIgnoreTap()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
switch (item.getItemId()) {
|
switch (item.getItemId()) {
|
||||||
case R.id.action_search:
|
case R.id.action_search:startActivity(new Intent(getActivity(), SearchActivity.class));
|
||||||
startActivity(new Intent(getActivity(), SearchActivity.class));
|
return true;
|
||||||
return true;
|
case R.id.action_easy_invite:
|
||||||
case R.id.action_easy_invite:
|
selectAccountToStartEasyInvite();
|
||||||
selectAccountToStartEasyInvite();
|
return true;
|
||||||
return true;
|
case R.id.action_note_to_self:
|
||||||
case R.id.action_note_to_self:
|
final List<Account> accounts = activity.xmppConnectionService.getAccounts();
|
||||||
final List<Account> accounts = activity.xmppConnectionService.getAccounts();
|
if (accounts.size() == 1) {
|
||||||
if (accounts.size() == 1) {
|
final Contact self = new Contact(accounts.get(0).getSelfContact());
|
||||||
final Contact self = new Contact(accounts.get(0).getSelfContact());
|
Conversation conversation = activity.xmppConnectionService.findOrCreateConversation(self.getAccount(), self.getJid(), false, false, null, true, null);
|
||||||
Conversation conversation = activity.xmppConnectionService.findOrCreateConversation(self.getAccount(), self.getJid(), false, false, null, true, null);
|
SoftKeyboardUtils.hideSoftKeyboard(activity);
|
||||||
SoftKeyboardUtils.hideSoftKeyboard(activity);
|
activity.switchToConversation(conversation);
|
||||||
activity.switchToConversation(conversation);
|
}
|
||||||
}
|
return true;
|
||||||
}
|
case R.id.action_toggle_stories:
|
||||||
return super.onOptionsItemSelected(item);
|
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getActivity());
|
||||||
}
|
boolean show = preferences.getBoolean("show_stories", true);
|
||||||
|
preferences.edit().putBoolean("show_stories", !show).apply();
|
||||||
|
refresh();
|
||||||
|
activity.invalidateOptionsMenu();
|
||||||
|
return true;
|
||||||
|
case R.id.action_add_story:
|
||||||
|
selectAccountToPublishStory();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return super.onOptionsItemSelected(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setShowStories(boolean show) {
|
||||||
|
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getActivity());
|
||||||
|
preferences.edit().putBoolean("show_stories", show).apply();
|
||||||
|
refresh();
|
||||||
|
activity.invalidateOptionsMenu();
|
||||||
|
}
|
||||||
private void selectAccountToStartEasyInvite() {
|
private void selectAccountToStartEasyInvite() {
|
||||||
final List<Account> accounts =
|
final List<Account> accounts =
|
||||||
EasyOnboardingInvite.getSupportingAccounts(activity.xmppConnectionService);
|
EasyOnboardingInvite.getSupportingAccounts(activity.xmppConnectionService);
|
||||||
|
|
@ -616,7 +665,10 @@ public class ConversationsOverviewFragment extends XmppFragment implements XmppC
|
||||||
);
|
);
|
||||||
Collections.sort(this.stories, (a,b) -> Long.compare(b.getPublished(), a.getPublished()));
|
Collections.sort(this.stories, (a,b) -> Long.compare(b.getPublished(), a.getPublished()));
|
||||||
|
|
||||||
if (this.stories.isEmpty()) {
|
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getActivity());
|
||||||
|
boolean show = preferences.getBoolean("show_stories", true);
|
||||||
|
|
||||||
|
if (this.stories.isEmpty() || !show) {
|
||||||
binding.storiesList.setVisibility(View.GONE);
|
binding.storiesList.setVisibility(View.GONE);
|
||||||
} else {
|
} else {
|
||||||
binding.storiesList.setVisibility(View.VISIBLE);
|
binding.storiesList.setVisibility(View.VISIBLE);
|
||||||
|
|
@ -639,6 +691,7 @@ public class ConversationsOverviewFragment extends XmppFragment implements XmppC
|
||||||
}
|
}
|
||||||
if (activity.xmppConnectionService != null && activity.xmppConnectionService.isOnboarding()) {
|
if (activity.xmppConnectionService != null && activity.xmppConnectionService.isOnboarding()) {
|
||||||
binding.fab.setVisibility(View.GONE);
|
binding.fab.setVisibility(View.GONE);
|
||||||
|
binding.fabStory.setVisibility(View.GONE);
|
||||||
|
|
||||||
if (this.conversations.size() == 1) {
|
if (this.conversations.size() == 1) {
|
||||||
if (activity instanceof OnConversationSelected) {
|
if (activity instanceof OnConversationSelected) {
|
||||||
|
|
@ -653,8 +706,16 @@ public class ConversationsOverviewFragment extends XmppFragment implements XmppC
|
||||||
|
|
||||||
if (showed) {
|
if (showed) {
|
||||||
this.binding.fab.setVisibility(View.GONE);
|
this.binding.fab.setVisibility(View.GONE);
|
||||||
|
this.binding.fabStory.setVisibility(View.GONE);
|
||||||
} else {
|
} else {
|
||||||
this.binding.fab.setVisibility(View.VISIBLE);
|
this.binding.fab.setVisibility(View.VISIBLE);
|
||||||
|
if (stories != null) {
|
||||||
|
if (show) {
|
||||||
|
this.binding.fabStory.setVisibility(View.VISIBLE);
|
||||||
|
} else {
|
||||||
|
this.binding.fabStory.setVisibility(View.GONE);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,67 +1,52 @@
|
||||||
<!--
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
~ Copyright (c) 2018, Daniel Gultsch All rights reserved.
|
|
||||||
~
|
|
||||||
~ Redistribution and use in source and binary forms, with or without modification,
|
|
||||||
~ are permitted provided that the following conditions are met:
|
|
||||||
~
|
|
||||||
~ 1. Redistributions of source code must retain the above copyright notice, this
|
|
||||||
~ list of conditions and the following disclaimer.
|
|
||||||
~
|
|
||||||
~ 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
||||||
~ this list of conditions and the following disclaimer in the documentation and/or
|
|
||||||
~ other materials provided with the distribution.
|
|
||||||
~
|
|
||||||
~ 3. Neither the name of the copyright holder nor the names of its contributors
|
|
||||||
~ may be used to endorse or promote products derived from this software without
|
|
||||||
~ specific prior written permission.
|
|
||||||
~
|
|
||||||
~ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
||||||
~ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
||||||
~ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
||||||
~ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
|
||||||
~ ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
||||||
~ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
~ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
|
||||||
~ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
~ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
~ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<menu xmlns:android="http://schemas.android.com/apk/res/android"
|
<menu xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||||
<item
|
<item
|
||||||
android:id="@+id/action_search"
|
android:id="@+id/action_search"
|
||||||
|
android:icon="@drawable/ic_search_24dp"
|
||||||
android:orderInCategory="1"
|
android:orderInCategory="1"
|
||||||
android:title="@string/search_messages"
|
android:title="@string/search_messages"
|
||||||
android:visible="@bool/show_individual_search_options"
|
android:visible="@bool/show_individual_search_options"
|
||||||
android:icon="@drawable/ic_search_24dp"
|
app:showAsAction="ifRoom" />
|
||||||
|
<item
|
||||||
|
android:id="@+id/action_add_story"
|
||||||
|
android:icon="@drawable/outline_amp_stories_24"
|
||||||
|
android:orderInCategory="2"
|
||||||
|
android:title="@string/add_story"
|
||||||
|
android:visible="false"
|
||||||
app:showAsAction="ifRoom" />
|
app:showAsAction="ifRoom" />
|
||||||
<item
|
<item
|
||||||
android:id="@+id/action_note_to_self"
|
android:id="@+id/action_note_to_self"
|
||||||
android:orderInCategory="80"
|
android:orderInCategory="80"
|
||||||
android:title="@string/note_to_self"
|
android:title="@string/note_to_self"
|
||||||
app:showAsAction="never"/>
|
app:showAsAction="never" />
|
||||||
<item
|
<item
|
||||||
android:id="@+id/action_easy_invite"
|
android:id="@+id/action_easy_invite"
|
||||||
android:orderInCategory="89"
|
|
||||||
app:showAsAction="ifRoom"
|
|
||||||
android:icon="@drawable/ic_person_add_24dp"
|
android:icon="@drawable/ic_person_add_24dp"
|
||||||
android:title="@string/invite_to_app" />
|
android:orderInCategory="89"
|
||||||
|
android:title="@string/invite_to_app"
|
||||||
|
app:showAsAction="ifRoom" />
|
||||||
|
<item
|
||||||
|
android:id="@+id/action_toggle_stories"
|
||||||
|
android:orderInCategory="90"
|
||||||
|
android:title="@string/show_stories"
|
||||||
|
app:showAsAction="never" />
|
||||||
<item
|
<item
|
||||||
android:id="@+id/action_accounts"
|
android:id="@+id/action_accounts"
|
||||||
android:orderInCategory="90"
|
android:orderInCategory="91"
|
||||||
android:title="@string/action_accounts"
|
android:title="@string/action_accounts"
|
||||||
app:showAsAction="never" />
|
app:showAsAction="never" />
|
||||||
<item
|
<item
|
||||||
android:id="@+id/action_account"
|
android:id="@+id/action_account"
|
||||||
android:orderInCategory="90"
|
android:orderInCategory="91"
|
||||||
android:title="@string/action_account"
|
android:title="@string/action_account"
|
||||||
app:showAsAction="never" />
|
app:showAsAction="never" />
|
||||||
<item android:id="@+id/action_privacy_policy"
|
<item
|
||||||
android:visible="false"
|
android:id="@+id/action_privacy_policy"
|
||||||
android:orderInCategory="98"
|
android:orderInCategory="98"
|
||||||
android:title="@string/privacy_policy"
|
android:title="@string/privacy_policy"
|
||||||
app:showAsAction="never"/>
|
android:visible="false"
|
||||||
|
app:showAsAction="never" />
|
||||||
<item
|
<item
|
||||||
android:id="@+id/action_settings"
|
android:id="@+id/action_settings"
|
||||||
android:orderInCategory="100"
|
android:orderInCategory="100"
|
||||||
|
|
|
||||||
|
|
@ -1585,4 +1585,8 @@
|
||||||
<string name="delete_story_dialog_title">Delete story</string>
|
<string name="delete_story_dialog_title">Delete story</string>
|
||||||
<string name="delete_story_dialog_message">Do you really want to delete this story</string>
|
<string name="delete_story_dialog_message">Do you really want to delete this story</string>
|
||||||
<string name="story_deleted">Story deleted</string>
|
<string name="story_deleted">Story deleted</string>
|
||||||
|
<string name="show_stories">Show stories</string>
|
||||||
|
<string name="hide_stories">Hide stories</string>
|
||||||
|
<string name="stories">Stories</string>
|
||||||
|
<string name="add_story">Add story</string>
|
||||||
</resources>
|
</resources>
|
||||||
Loading…
Add table
Add a link
Reference in a new issue