package com.pubnub.chatterbox; import android.app.Activity; import android.app.FragmentManager; import android.app.FragmentTransaction; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.ServiceConnection; import android.os.Bundle; import android.os.IBinder; import android.support.v4.widget.DrawerLayout; import android.support.v7.app.ActionBarDrawerToggle; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.util.Log; import android.view.Gravity; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.Window; import android.widget.FrameLayout; import com.pubnub.chatterbox.domain.Room; import com.pubnub.chatterbox.domain.UserProfile; import com.pubnub.chatterbox.fragments.ChatterBoxRoomFragment; import com.pubnub.chatterbox.fragments.RoomHost; import com.pubnub.chatterbox.fragments.WhoIsOnelineFragment; import com.pubnub.chatterbox.service.ChatterBoxService; import com.pubnub.chatterbox.service.binder.ChatterBoxClient; import java.util.HashMap; import java.util.Map; public class ChatterBoxMainActivity extends AppCompatActivity implements RoomHost { private ChatterBoxClient chatterBoxServiceClient; private UserProfile currentUserProfile; private WhoIsOnelineFragment whoIsOnelineFragment; private HashMap<String,Room> currentlyHostedRooms = new HashMap<>(); private String currentRoomKey; private boolean connectedToRoom = false; private DrawerLayout mDrawLayout; private Toolbar mToolBar; private ActionBarDrawerToggle mDrawerToggle; private FrameLayout mDrawFragmentLayout; private ServiceConnection serviceConnection = new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder service) { Log.d(Constants.LOGT, "connecting to service"); chatterBoxServiceClient = (ChatterBoxClient) service; } @Override public void onServiceDisconnected(ComponentName name) { Log.d(Constants.LOGT, "disconnecting from service"); } }; @Override public void connectedToRoom(String roomTitle, String roomChannelForHereNow) { connectedToRoom = true; Room r = new Room(); r.setRoomName(roomChannelForHereNow); r.setRoomTitle(roomTitle); r.setActive(true); currentlyHostedRooms.put(roomChannelForHereNow, r); whoIsOnelineFragment = WhoIsOnelineFragment.newInstance(currentUserProfile,roomChannelForHereNow,roomTitle); whoIsOnelineFragment.setCurrentUserProfile(currentUserProfile); FragmentManager fm = getFragmentManager(); FragmentTransaction fragmentTransaction = fm.beginTransaction(); fragmentTransaction.replace(R.id.whos_online_fragment_container, whoIsOnelineFragment); fragmentTransaction.commit(); getSupportActionBar().setTitle(r.getRoomTitle()); } @Override public void disconnectingFromRoom(String roomChannelName) { connectedToRoom = false; //for now just remove the room currentlyHostedRooms.remove(roomChannelName); chatterBoxServiceClient.leaveRoom(roomChannelName); } @Override public Map<String, Room> getCurrentRooms() { return currentlyHostedRooms; } @Override protected void onCreate(Bundle savedInstanceState) { supportRequestWindowFeature(Window.FEATURE_NO_TITLE); super.onCreate(savedInstanceState); setContentView(R.layout.activity_pubnub_main); if (null == currentUserProfile) { startActivityForResult(new Intent(this, ChatterBoxLogin.class), Constants.SIGN_IN_REQUEST, null); } mDrawLayout = (DrawerLayout)findViewById(R.id.mainDrawerLayout); mToolBar = (Toolbar)findViewById(R.id.application_toolbar); mDrawFragmentLayout = (FrameLayout)findViewById(R.id.whos_online_fragment_container); mDrawerToggle = new ActionBarDrawerToggle(this,mDrawLayout,mToolBar, R.string.navigation_drawer_open, R.string.navigation_drawer_close){ @Override public void onDrawerOpened(View drawerView) { super.onDrawerOpened(drawerView); invalidateOptionsMenu(); } @Override public void onDrawerClosed(View drawerView) { super.onDrawerClosed(drawerView); invalidateOptionsMenu(); } }; mDrawLayout.setDrawerListener(mDrawerToggle); setSupportActionBar(mToolBar); getSupportActionBar().setDisplayHomeAsUpEnabled(true); mDrawLayout.post(new Runnable() { @Override public void run() { mDrawerToggle.syncState(); } }); } @Override public boolean onCreateOptionsMenu(Menu menu){ getMenuInflater().inflate(R.menu.chatterbox_main, menu); return super.onCreateOptionsMenu(menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch(item.getItemId()){ case R.id.action_view_history: Log.d(Constants.LOGT, "view history appbar option selected"); break; case 16908332: Log.d(Constants.LOGT, "navigation indicator clicked, this seems to be the only way to capture this"); //mDrawLayout.openDrawer(mDrawFragmentLayout); //This seems to work just fine for the drawer mDrawLayout.openDrawer(Gravity.LEFT); break; case R.id.action_whosonline: mDrawLayout.openDrawer(Gravity.LEFT); break; case R.id.action_leave_room: chatterBoxServiceClient.leaveRoom(currentRoomKey); break; default: Log.d(Constants.LOGT, "option was selected with id: " + item.getItemId() + " name: " + item.getTitle()); } return super.onOptionsItemSelected(item); } @Override public void onStart(){ super.onStart(); Intent intent = new Intent(this, ChatterBoxService.class); bindService(intent, serviceConnection, Context.BIND_AUTO_CREATE); } @Override protected void onActivityResult(int requestCode, int responseCode, Intent intent) { if (requestCode == Constants.SIGN_IN_REQUEST) { if (responseCode == Activity.RESULT_OK) { currentUserProfile = (UserProfile) intent.getExtras().getSerializable(Constants.CURRENT_USER_PROFILE); chatterBoxServiceClient.connect(currentUserProfile); addRoom(Constants.MAIN_CHAT_ROOM, "Main"); } } } private void addRoom(String roomName, String roomTitle) { //Load up the Message View FragmentManager fragmentManager = getFragmentManager(); FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); ChatterBoxRoomFragment roomFragment = ChatterBoxRoomFragment.newInstance(currentUserProfile, roomName, roomTitle); fragmentTransaction.replace(R.id.room_fragment_container, roomFragment); fragmentTransaction.commit(); } }