package com.wamod.activity.conversation;
import android.content.Intent;
import android.graphics.Color;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.*;
import android.widget.*;
import com.wamod.*;
import com.whatsapp.contact.ContactProvider;
import java.util.List;
/**
* Created by brianvalente on 9/24/16.
*/
public class ConversationActivity extends AppCompatActivity {
String mJabberId;
Contact mContact;
MessagesManager mMessagesManager;
List<MessagesManager.Message> mMessageList;
RecyclerView mMessagesRV;
Toolbar mToolbar;
MessagesAdapter mMessagesAdapter;
LinearLayoutManager mLayoutManager;
private static int NAVIGATION_BAR_SIZE = Utils.getNavigationBarHeight();
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(Resources.getLayout("wamod_activity_conversation"));
mToolbar = (Toolbar) findViewById(Resources.getID("toolbar"));
mMessagesRV = (RecyclerView) findViewById(Resources.getID("messagesRV"));
mMessagesManager = new MessagesManager(this);
mLayoutManager = new LinearLayoutManager(this);
// Obtaining contact
Intent intent = getIntent();
mJabberId = intent.getStringExtra("jid");
Uri uri = intent.getData();
boolean uriIsValid = ContactProvider.a(uri);
if (uriIsValid)
mContact = Contact.getContactFromUri(uri);
else
mContact = Contact.getContactFromJabberId(mJabberId);
mJabberId = mContact.jabberId;
// Setting up
setSupportActionBar(mToolbar);
ActionBar actionBar = getSupportActionBar();
actionBar.setDisplayHomeAsUpEnabled(true); // Show back button
actionBar.setDisplayShowTitleEnabled(false); // Hide the "WhatsApp" title
String conversationTitle = mContact.fullName;
if (conversationTitle == null || conversationTitle.isEmpty()) conversationTitle = mContact.jabberId;
mToolbar.setTitle(conversationTitle);
mMessagesRV.setLayoutManager(mLayoutManager);
// Setting up views
final View toolbarContainer = findViewById(Resources.getID("toolbarContainer"));
View statusBarPadding = findViewById(Resources.getID("statusBarPadding"));
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, Utils.getStatusBarHeight(this));
statusBarPadding.setLayoutParams(params);
toolbarContainer.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
Log.i("Conversation", "ListView top padding: " + toolbarContainer.getHeight());
mMessagesRV.setPadding(0, toolbarContainer.getHeight(), 0, NAVIGATION_BAR_SIZE);
}
});
// Set colors
statusBarPadding.setBackgroundColor(ColorsManager.getColor(ColorsManager.UI_ACTIVITY_STATUSBAR));
mToolbar.setBackgroundColor(ColorsManager.getColor(ColorsManager.UI_ACTIVITY_TOOLBAR));
mToolbar.setTitleTextColor(ColorsManager.getColor(ColorsManager.UI_ACTIVITY_TOOLBAR_TITLE));
if (Utils.prefs.getBoolean("general_darkstatusbaricons", false))
findViewById(android.R.id.content).setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
// Fully transparent bars
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Window w = getWindow(); // in Activity's onCreate() for instance
w.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
w.setStatusBarColor(Color.parseColor("#00000000"));
w.setNavigationBarColor(Color.parseColor("#00000000"));
}
// Obtaining and loading messages
new LoadMessages().execute();
}
private List<MessagesManager.Message> getMessages(int limit, int offset) {
return mMessagesManager.getConversationMessages(mJabberId, limit, offset);
}
private class LoadMessages extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... voids) {
mMessageList = mMessagesManager.getConversationMessages(mJabberId, 0, 0);
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
mMessagesAdapter = new MessagesAdapter(ConversationActivity.this, mMessageList); // Better performance
mMessagesAdapter.setHasStableIds(true);
mMessagesRV.setAdapter(mMessagesAdapter);
mMessagesRV.setHasFixedSize(true); // Better performance
mMessagesRV.scrollToPosition(mMessagesAdapter.getItemCount() - 1); // Why "- 1"? Only God knows, but works
}
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == android.R.id.home) onBackPressed();
return true;
}
}