make archive menu item work

Daniel Gultsch created

Change summary

src/main/java/eu/siacs/conversations/ui/ConversationActivity.java          | 30 
src/main/java/eu/siacs/conversations/ui/ConversationFragment.java          |  9 
src/main/java/eu/siacs/conversations/ui/ConversationsOverviewFragment.java | 21 
src/main/java/eu/siacs/conversations/ui/adapter/ConversationAdapter.java   |  4 
4 files changed, 52 insertions(+), 12 deletions(-)

Detailed changes

src/main/java/eu/siacs/conversations/ui/ConversationActivity.java 🔗

@@ -204,6 +204,15 @@ public class ConversationActivity extends XmppActivity implements OnConversation
 		return super.onOptionsItemSelected(item);
 	}
 
+	@Override
+	protected void onStart() {
+		final int theme = findTheme();
+		if (this.mTheme != theme) {
+			recreate();
+		}
+		super.onStart();
+	}
+
 	@Override
 	protected void onNewIntent(final Intent intent) {
 		if (isViewIntent(intent)) {
@@ -224,10 +233,6 @@ public class ConversationActivity extends XmppActivity implements OnConversation
 	@Override
 	public void onResume() {
 		super.onResume();
-		final int theme = findTheme();
-		if (this.mTheme != theme) {
-			recreate();
-		}
 		this.mActivityPaused = false;
 	}
 
@@ -291,7 +296,22 @@ public class ConversationActivity extends XmppActivity implements OnConversation
 
 	@Override
 	public void onConversationArchived(Conversation conversation) {
-
+		//TODO; check if nothing more left;
+		Fragment mainFragment = getFragmentManager().findFragmentById(R.id.main_fragment);
+		if (mainFragment != null && mainFragment instanceof ConversationFragment) {
+			getFragmentManager().popBackStack();
+			return;
+		}
+		Fragment secondaryFragment = getFragmentManager().findFragmentById(R.id.secondary_fragment);
+		if (secondaryFragment != null && secondaryFragment instanceof ConversationFragment) {
+			if (((ConversationFragment) secondaryFragment).getConversation() == conversation) {
+				Conversation suggestion = ConversationsOverviewFragment.getSuggestion(this, conversation);
+				if (suggestion != null) {
+					openConversation(suggestion, null);
+					return;
+				}
+			}
+		}
 	}
 
 	@Override

src/main/java/eu/siacs/conversations/ui/ConversationFragment.java 🔗

@@ -149,6 +149,7 @@ public class ConversationFragment extends XmppFragment implements EditMessage.Ke
 
 		@Override
 		public void onClick(View v) {
+			activity.xmppConnectionService.archiveConversation(conversation);
 			activity.onConversationArchived(conversation);
 		}
 	};
@@ -1032,6 +1033,7 @@ public class ConversationFragment extends XmppFragment implements EditMessage.Ke
 				handleAttachmentSelection(item);
 				break;
 			case R.id.action_archive:
+				activity.xmppConnectionService.archiveConversation(conversation);
 				activity.onConversationArchived(conversation);
 				break;
 			case R.id.action_contact_details:
@@ -1239,6 +1241,7 @@ public class ConversationFragment extends XmppFragment implements EditMessage.Ke
 		builder.setPositiveButton(getString(R.string.delete_messages), (dialog, which) -> {
 			this.activity.xmppConnectionService.clearConversationHistory(conversation);
 			if (endConversationCheckBox.isChecked()) {
+				this.activity.xmppConnectionService.archiveConversation(conversation);
 				this.activity.onConversationArchived(conversation);
 			} else {
 				activity.onConversationsListItemUpdated();
@@ -1353,7 +1356,11 @@ public class ConversationFragment extends XmppFragment implements EditMessage.Ke
 	@Override
 	public void onResume() {
 		new Handler().post(() -> {
-			final PackageManager packageManager = getActivity().getPackageManager();
+			final Activity activity = getActivity();
+			if (activity == null) {
+				return;
+			}
+			final PackageManager packageManager = activity.getPackageManager();
 			ConversationMenuConfigurator.updateAttachmentAvailability(packageManager);
 			getActivity().invalidateOptionsMenu();
 		});

src/main/java/eu/siacs/conversations/ui/ConversationsOverviewFragment.java 🔗

@@ -60,11 +60,29 @@ public class ConversationsOverviewFragment extends XmppFragment implements Enhan
 	private XmppActivity activity;
 
 	public static Conversation getSuggestion(Activity activity) {
+		final Conversation exception;
+		Fragment fragment = activity.getFragmentManager().findFragmentById(R.id.main_fragment);
+		if (fragment != null && fragment instanceof ConversationsOverviewFragment) {
+			exception = ((ConversationsOverviewFragment) fragment).swipedConversation.peek();
+		} else {
+			exception = null;
+		}
+		return getSuggestion(activity, exception);
+	}
+
+	public static Conversation getSuggestion(Activity activity, Conversation exception) {
 		Fragment fragment = activity.getFragmentManager().findFragmentById(R.id.main_fragment);
 		if (fragment != null && fragment instanceof ConversationsOverviewFragment) {
 			List<Conversation> conversations = ((ConversationsOverviewFragment) fragment).conversations;
 			if (conversations.size() > 0) {
-				return conversations.get(0);
+				Conversation suggestion = conversations.get(0);
+				if (suggestion == exception) {
+					if (conversations.size() > 1) {
+						return conversations.get(1);
+					}
+				} else {
+					return suggestion;
+				}
 			}
 		}
 		return null;
@@ -74,7 +92,6 @@ public class ConversationsOverviewFragment extends XmppFragment implements Enhan
 	@Override
 	public void onAttach(Activity activity) {
 		super.onAttach(activity);
-		Log.d(Config.LOGTAG, "on attach");
 		if (activity instanceof XmppActivity) {
 			this.activity = (XmppActivity) activity;
 		} else {

src/main/java/eu/siacs/conversations/ui/adapter/ConversationAdapter.java 🔗

@@ -173,10 +173,6 @@ public class ConversationAdapter extends ArrayAdapter<Conversation> {
 	@Override
 	public void notifyDataSetChanged() {
 		this.selectedConversation = ConversationFragment.getConversation(activity);
-		Log.d(Config.LOGTAG,"notify data set changed");
-		if (this.selectedConversation == null) {
-			Log.d(Config.LOGTAG,"selected conversation is null");
-		}
 		super.notifyDataSetChanged();
 	}