/**
   * 消息分发,选择跳转到哪个fragment
   *
   * @param intent
   */
  private void enterFragment(Intent intent) {
    String tag = null;

    if (intent != null) {
      Fragment fragment = null;

      if (intent.getExtras() != null && intent.getExtras().containsKey(RongConst.EXTRA.CONTENT)) {
        String fragmentName = intent.getExtras().getString(RongConst.EXTRA.CONTENT);
        fragment = Fragment.instantiate(this, fragmentName);
      } else if (intent.getData() != null) {

        if (intent.getData().getPathSegments().get(0).equals("conversation")) {
          tag = "conversation";
          String fragmentName = ConversationFragment.class.getCanonicalName();
          fragment = Fragment.instantiate(this, fragmentName);

        } else if (intent.getData().getLastPathSegment().equals("conversationlist")) {
          tag = "conversationlist";
          String fragmentName = ConversationListFragment.class.getCanonicalName();
          fragment = Fragment.instantiate(this, fragmentName);
        } else if (intent.getData().getLastPathSegment().equals("subconversationlist")) {
          tag = "subconversationlist";
          String fragmentName = SubConversationListFragment.class.getCanonicalName();
          fragment = Fragment.instantiate(this, fragmentName);
          SubConversationListFragment sub = (SubConversationListFragment) fragment;
          sub.setAdapter(new SubConversationListAdapterEx(RongContext.getInstance()));
        } else if (intent.getData().getPathSegments().get(0).equals("friend")) {
          tag = "friend";
          String fragmentName = FriendMultiChoiceFragment.class.getCanonicalName();
          fragment = Fragment.instantiate(this, fragmentName);
          ActionBar actionBar = getSupportActionBar();
          actionBar.hide(); // 隐藏ActionBar
        }

        targetId = intent.getData().getQueryParameter("targetId");
        targetIds = intent.getData().getQueryParameter("targetIds");
        mDiscussionId = intent.getData().getQueryParameter("discussionId");

        if (targetId != null) {
          mConversationType =
              Conversation.ConversationType.valueOf(
                  intent.getData().getLastPathSegment().toUpperCase(Locale.getDefault()));
        } else if (targetIds != null) {
          mConversationType =
              Conversation.ConversationType.valueOf(
                  intent.getData().getLastPathSegment().toUpperCase(Locale.getDefault()));
        }
      }

      if ("tag".equals(tag)) {
        showRealTimeLocationBar(null); // RealTimeLocation
      }

      if (fragment != null) {
        FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
        transaction.add(R.id.de_content, fragment, tag);
        transaction.addToBackStack(null).commitAllowingStateLoss();
      }
    }
  }
  private void initData() {
    if (mConversationType.equals(Conversation.ConversationType.DISCUSSION)) {
      RongIM.getInstance()
          .getRongIMClient()
          .getDiscussion(
              mTargetId,
              new RongIMClient.ResultCallback<Discussion>() {
                @Override
                public void onSuccess(Discussion discussion) {
                  mIdList = discussion.getMemberIdList();
                  mAdapter.setCreatorId(discussion.getCreatorId());
                  Message msg = new Message();
                  msg.what = PREPARE_LIST;
                  msg.obj = mIdList;
                  getHandler().sendMessage(msg);
                }

                @Override
                public void onError(RongIMClient.ErrorCode errorCode) {
                  getHandler().sendEmptyMessage(SHOW_TOAST);
                }
              });
    } else if (mConversationType.equals(Conversation.ConversationType.PRIVATE)) {
      mIdList.add(mTargetId);
      Message msg = new Message();
      msg.what = PREPARE_LIST;
      msg.obj = mIdList;
      getHandler().sendMessage(msg);
    }
  }
 private void joinRealTimeLocation() {
   RongIMClient.getInstance().joinRealTimeLocation(mConversationType, targetId);
   Intent intent = new Intent(RongActivity.this, RealTimeLocationActivity.class);
   intent.putExtra("conversationType", mConversationType.getValue());
   intent.putExtra("targetId", targetId);
   startActivity(intent);
 }
  @Override
  public boolean onCreateOptionsMenu(final Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.de_conversation_menu, menu);

    if (mConversationType != null) {
      if (mConversationType.equals(Conversation.ConversationType.CHATROOM)) {
        menu.getItem(0).setVisible(false);
      } else if (mConversationType.equals(Conversation.ConversationType.DISCUSSION)
          && isDiscussion) {
        menu.getItem(0).setVisible(false);
      }
    }

    return super.onCreateOptionsMenu(menu);
  }
  /**
   * 收到 push 以后,打开会话页面
   *
   * @param conversation
   * @param targetId
   * @param conversationType
   */
  private void openConversationFragment(
      String conversation, String targetId, String conversationType) {

    String tag;

    if (conversation.equals("conversation")) {
      tag = "conversation";
      ConversationFragment conversationFragment = new ConversationFragment();

      Uri uri =
          Uri.parse("rong://" + getApplicationInfo().packageName)
              .buildUpon()
              .appendPath("conversation")
              .appendPath(conversationType.toLowerCase())
              .appendQueryParameter("targetId", targetId)
              .build();

      conversationFragment.setUri(uri);
      mConversationType = Conversation.ConversationType.valueOf(conversationType);

      showRealTimeLocationBar(null); // RealTimeLocation

      if (conversationFragment != null) {
        FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
        transaction.add(R.id.de_content, conversationFragment, tag);
        transaction.addToBackStack(null).commitAllowingStateLoss();
      }
    }
  }
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Intent intent;

    RongContext.getInstance().getEventBus().register(this);

    if (getActivity() != null) {

      intent = getActivity().getIntent();

      if (intent.getData() != null) {

        mConversationType =
            Conversation.ConversationType.valueOf(
                intent.getData().getLastPathSegment().toUpperCase());

        mTargetId = intent.getData().getQueryParameter("targetId");
      }
    }
    mAdapter = new RongConversationAddMemberAdapter(getActivity());
    mAdapter.setDeleteIconListener(this);

    if (RongIM.getInstance() != null && RongIM.getInstance().getRongIMClient() != null) {
      initData();
    }
  }
  /** 根据 targetid 和 ConversationType 进入到设置页面 */
  private void enterSettingActivity() {

    if (mConversationType == Conversation.ConversationType.PUBLIC_SERVICE
        || mConversationType == Conversation.ConversationType.APP_PUBLIC_SERVICE) {

      RongIM.getInstance().startPublicServiceProfile(this, mConversationType, targetId);
    } else {
      // 通过targetId 和 会话类型 打开指定的设置页面
      if (!TextUtils.isEmpty(targetId)) {

        Uri uri =
            Uri.parse("demo://" + getApplicationInfo().packageName)
                .buildUpon()
                .appendPath("conversationSetting")
                .appendPath(mConversationType.getName())
                .appendQueryParameter("targetId", targetId)
                .build();

        Intent intent = new Intent(Intent.ACTION_VIEW);
        intent.setData(uri);
        startActivity(intent);
        // 当你刚刚创建完讨论组以后获得的是 targetIds
      } else if (!TextUtils.isEmpty(targetIds)) {

        UriFragment fragment = (UriFragment) getSupportFragmentManager().getFragments().get(0);
        fragment.getUri();
        // 得到讨论组的 targetId
        targetId = fragment.getUri().getQueryParameter("targetId");

        if (!TextUtils.isEmpty(targetId)) {
          Uri uri =
              Uri.parse("demo://" + getApplicationInfo().packageName)
                  .buildUpon()
                  .appendPath("conversationSetting")
                  .appendPath(mConversationType.getName())
                  .appendQueryParameter("targetId", targetId)
                  .build();

          Intent intent = new Intent(Intent.ACTION_VIEW);
          intent.setData(uri);
          startActivity(intent);
        } else {
          WinToast.toast(RongActivity.this, "讨论组尚未创建成功");
        }
      }
    }
  }
  protected void initView() {
    mHandler = new Handler(this);
    mDialog = new LoadingDialog(this);
    mFragmentManager = getSupportFragmentManager();
    getSupportActionBar().setTitle(R.string.main_name);
    DisplayMetrics dm = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(dm); // 获取屏幕信息
    indicatorWidth = dm.widthPixels / 4; // 指示器宽度为屏幕宽度的4/1

    mMainShow = (LinearLayout) findViewById(R.id.main_show);
    mMainConversationLiner = (RelativeLayout) findViewById(R.id.main_conversation_liner);
    mMainGroupLiner = (RelativeLayout) findViewById(R.id.main_group_liner);
    mMainChatroomLiner = (RelativeLayout) findViewById(R.id.main_chatroom_liner);
    mMainCustomerLiner = (RelativeLayout) findViewById(R.id.main_customer_liner);
    mMainConversationTv = (TextView) findViewById(R.id.main_conversation_tv);
    mMainGroupTv = (TextView) findViewById(R.id.main_group_tv);
    mMainChatroomTv = (TextView) findViewById(R.id.main_chatroom_tv);
    mMainCustomerTv = (TextView) findViewById(R.id.main_customer_tv);
    mViewPager = (ViewPager) findViewById(R.id.main_viewpager);
    mMainSelectImg = (ImageView) findViewById(R.id.main_switch_img);
    mUnreadNumView = (TextView) findViewById(R.id.de_num);
    mCustomerNoRead = (TextView) findViewById(R.id.customer_noread);

    ViewGroup.LayoutParams cursor_Params = mMainSelectImg.getLayoutParams();
    cursor_Params.width = indicatorWidth; // 初始化滑动下标的宽
    mMainSelectImg.setLayoutParams(cursor_Params);
    // 获取布局填充器
    mInflater = (LayoutInflater) this.getSystemService(LAYOUT_INFLATER_SERVICE);

    if (getIntent() != null) {
      if (getIntent().hasExtra("PUSH_TOKEN") && getIntent().hasExtra("PUSH_INTENT")) {

        Uri uri = getIntent().getParcelableExtra("PUSH_INTENT");
        String token = getIntent().getStringExtra("PUSH_TOKEN").toString();
        String pathSegments;
        String conversationType = null;
        String targetId = null;

        if (uri.getPathSegments().get(0).equals("conversation")) {
          pathSegments = uri.getPathSegments().get(0);
          conversationType =
              Conversation.ConversationType.valueOf(
                      uri.getLastPathSegment().toUpperCase(Locale.getDefault()))
                  .toString();
          targetId = uri.getQueryParameter("targetId").toString();
        } else {
          pathSegments = uri.getLastPathSegment();
        }
        reconnect(token, pathSegments, conversationType, targetId);

        if (DemoContext.getInstance() != null) {
          mGetMyGroupsRequest =
              DemoContext.getInstance().getDemoApi().getMyGroups(MainActivity.this);
        }
      }
    }
  }
  @Override
  public boolean handleMessage(android.os.Message msg) {
    switch (msg.what) {
      case PREPARE_LIST:
        List<String> mMemberInfo = (List<String>) msg.obj;
        int i = 0;
        for (String id : mMemberInfo) {
          if (i < 50) {
            UserInfo userInfo = RongContext.getInstance().getUserInfoFromCache(id);
            if (userInfo == null) {
              mMembers.add(new UserInfo(id, null, null));
            } else mMembers.add(userInfo);
          } else {
            break;
          }

          i++;
        }
        UserInfo addBtn = new UserInfo("RongAddBtn", null, null);
        mMembers.add(addBtn);

        String curUserId = RongIM.getInstance().getRongIMClient().getCurrentUserId();
        if (mAdapter.getCreatorId() != null
            && mConversationType.equals(Conversation.ConversationType.DISCUSSION)
            && curUserId.equals(mAdapter.getCreatorId())) {
          UserInfo deleteBtn = new UserInfo("RongDelBtn", null, null);
          mMembers.add(deleteBtn);
        }

        mAdapter.addCollection(mMembers);
        mAdapter.notifyDataSetChanged();
        break;
      case REMOVE_ITEM:
        int position = (Integer) msg.obj;
        mAdapter.remove(position);
        mAdapter.notifyDataSetChanged();
        break;
      case SHOW_TOAST:
        break;
    }
    return true;
  }
Exemplo n.º 10
0
 public void startConversationSystem(
     Context context,
     Conversation.ConversationType conversationType,
     String targetId,
     String title) {
   if (context != null && !TextUtils.isEmpty(targetId) && conversationType != null) {
     if (RongContext.getInstance() == null) {
       throw new ExceptionInInitializerError("RongCloud SDK not init");
     } else {
       Uri uri =
           Uri.parse("rong://" + context.getApplicationInfo().processName + ".system")
               .buildUpon()
               .appendPath("conversation")
               .appendPath(conversationType.getName().toLowerCase())
               .appendQueryParameter("targetId", targetId)
               .appendQueryParameter("title", title)
               .build();
       context.startActivity(new Intent("android.intent.action.VIEW", uri));
     }
   } else {
     throw new IllegalArgumentException();
   }
 }
  /** 设置 title */
  protected void initData() {

    if (mConversationType != null) {
      if (mConversationType.equals(Conversation.ConversationType.PRIVATE)) {
        if (DemoContext.getInstance() != null) {
          UserInfos userInfos =
              mUserInfosDao
                  .queryBuilder()
                  .where(UserInfosDao.Properties.Userid.eq(targetId))
                  .unique();

          if (userInfos == null) {
            getSupportActionBar().setTitle("");
          } else {
            getSupportActionBar().setTitle(userInfos.getUsername().toString());
          }
        }
      } else if (mConversationType.equals(Conversation.ConversationType.GROUP)) {
        if (DemoContext.getInstance() != null) {
          getSupportActionBar().setTitle(DemoContext.getInstance().getGroupNameById(targetId));
        }
      } else if (mConversationType.equals(Conversation.ConversationType.DISCUSSION)) {
        if (targetId != null) {

          RongIM.getInstance()
              .getRongIMClient()
              .getDiscussion(
                  targetId,
                  new RongIMClient.ResultCallback<Discussion>() {
                    @Override
                    public void onSuccess(Discussion discussion) {
                      getSupportActionBar().setTitle(discussion.getName());
                    }

                    @Override
                    public void onError(RongIMClient.ErrorCode e) {
                      if (e.equals(RongIMClient.ErrorCode.NOT_IN_DISCUSSION)) {
                        getSupportActionBar().setTitle("不在讨论组中");
                        isDiscussion = true;
                        supportInvalidateOptionsMenu();
                      }
                    }
                  });

        } else if (targetIds != null) {
          setDiscussionName(targetIds);
        } else {
          getSupportActionBar().setTitle("讨论组");
        }
      } else if (mConversationType.equals(Conversation.ConversationType.SYSTEM)) {
        getSupportActionBar().setTitle("系统会话类型");
      } else if (mConversationType.equals(Conversation.ConversationType.CHATROOM)) {
        getSupportActionBar().setTitle("聊天室");
      } else if (mConversationType.equals(Conversation.ConversationType.CUSTOMER_SERVICE)) {
        getSupportActionBar().setTitle("客服");
      } else if (mConversationType.equals(Conversation.ConversationType.APP_PUBLIC_SERVICE)) {
        if (RongIM.getInstance() != null && RongIM.getInstance().getRongIMClient() != null) {

          RongIM.getInstance()
              .getRongIMClient()
              .getPublicServiceProfile(
                  Conversation.PublicServiceType.APP_PUBLIC_SERVICE,
                  targetId,
                  new RongIMClient.ResultCallback<PublicServiceProfile>() {
                    @Override
                    public void onSuccess(PublicServiceProfile publicServiceProfile) {
                      getSupportActionBar().setTitle(publicServiceProfile.getName().toString());
                    }

                    @Override
                    public void onError(RongIMClient.ErrorCode errorCode) {}
                  });
        }

      } else if (mConversationType.equals(Conversation.ConversationType.PUBLIC_SERVICE)) {
        if (RongIM.getInstance() != null && RongIM.getInstance().getRongIMClient() != null) {

          RongIM.getInstance()
              .getRongIMClient()
              .getPublicServiceProfile(
                  Conversation.PublicServiceType.PUBLIC_SERVICE,
                  targetId,
                  new RongIMClient.ResultCallback<PublicServiceProfile>() {
                    @Override
                    public void onSuccess(PublicServiceProfile publicServiceProfile) {
                      getSupportActionBar().setTitle(publicServiceProfile.getName().toString());
                    }

                    @Override
                    public void onError(RongIMClient.ErrorCode errorCode) {}
                  });
        }
      }
    }

    if (!TextUtils.isEmpty(targetId) && mConversationType != null) {

      RealTimeLocationConstant.RealTimeLocationErrorCode errorCode =
          RongIMClient.getInstance().getRealTimeLocation(mConversationType, targetId);
      Log.e(TAG, "register addRealTimeLocationListener:--111111111-" + errorCode);
      if (errorCode
              == RealTimeLocationConstant.RealTimeLocationErrorCode.RC_REAL_TIME_LOCATION_SUCCESS
          || errorCode
              == RealTimeLocationConstant.RealTimeLocationErrorCode
                  .RC_REAL_TIME_LOCATION_IS_ON_GOING) {
        Log.e(TAG, "register addRealTimeLocationListener:--22222222222-");
        RongIMClient.getInstance()
            .addRealTimeLocationListener(mConversationType, targetId, this); // 设置监听
        currentLocationStatus =
            RongIMClient.getInstance().getRealTimeLocationCurrentState(mConversationType, targetId);

        if (currentLocationStatus
            == RealTimeLocationConstant.RealTimeLocationStatus
                .RC_REAL_TIME_LOCATION_STATUS_INCOMING) {
          showRealTimeLocationBar(currentLocationStatus);
        }
      }
    } else {
    }
  }