Commit 18bb680b authored by linfeng's avatar linfeng

代码合并提交

parents 61a8c475 6443a94e
...@@ -8,8 +8,8 @@ android { ...@@ -8,8 +8,8 @@ android {
minSdkVersion rootProject.ext.minSdkVersion minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion
flavorDimensions "default" flavorDimensions "default"
versionCode 153 versionCode 150
versionName "1.5.3" versionName "1.5.0"
multiDexEnabled true multiDexEnabled true
...@@ -79,6 +79,9 @@ android { ...@@ -79,6 +79,9 @@ android {
if (variant.buildType.name == 'release') { if (variant.buildType.name == 'release') {
def productVersion = "Rv" + releaseTime() + "V" + defaultConfig.versionName + "_Release_" + productFlavors[0].name + ".apk"; def productVersion = "Rv" + releaseTime() + "V" + defaultConfig.versionName + "_Release_" + productFlavors[0].name + ".apk";
outputFileName = productVersion outputFileName = productVersion
} else if(variant.buildType.name == 'debug'){
def productVersion = "Rv" + releaseTime() + "V" + defaultConfig.versionName + "_Debug_" + productFlavors[0].name + ".apk";
outputFileName = productVersion
} }
} }
} }
......
...@@ -85,6 +85,10 @@ ...@@ -85,6 +85,10 @@
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" /> <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" /> <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name="android.permission.SYSTEM_OVERLAY_WINDOW" />
<supports-screens <supports-screens
android:anyDensity="true" android:anyDensity="true"
android:largeScreens="true" android:largeScreens="true"
......
...@@ -42,7 +42,6 @@ import com.ruiwenliu.wrapper.bean.UpdateTokenBean; ...@@ -42,7 +42,6 @@ import com.ruiwenliu.wrapper.bean.UpdateTokenBean;
import com.ruiwenliu.wrapper.receiver.NetWorkReceiver; import com.ruiwenliu.wrapper.receiver.NetWorkReceiver;
import com.ruiwenliu.wrapper.statusbar.StatusBarUtil; import com.ruiwenliu.wrapper.statusbar.StatusBarUtil;
import com.ruiwenliu.wrapper.util.UtilsManager; import com.ruiwenliu.wrapper.util.UtilsManager;
import com.ruiwenliu.wrapper.util.glide.GlideApp;
import com.ruiwenliu.wrapper.util.listener.SwitchFragment; import com.ruiwenliu.wrapper.util.listener.SwitchFragment;
import com.ruiwenliu.wrapper.weight.CustomScrollViewPager; import com.ruiwenliu.wrapper.weight.CustomScrollViewPager;
import com.ruiwenliu.wrapper.weight.TitleView; import com.ruiwenliu.wrapper.weight.TitleView;
...@@ -59,6 +58,11 @@ import com.rv.home.rv.module.ui.main.home.bean.EffectiveTimeBean; ...@@ -59,6 +58,11 @@ import com.rv.home.rv.module.ui.main.home.bean.EffectiveTimeBean;
import com.rv.im.ImService; import com.rv.im.ImService;
import com.rv.im.ImSetting; import com.rv.im.ImSetting;
import com.rv.im.call.AudioOrVideoController; import com.rv.im.call.AudioOrVideoController;
import com.rv.im.db.table.ChatMessage;
import com.rv.im.view.TitleTextWindow;
import com.rv.im.xmpp.ListenerManager;
import com.rv.im.xmpp.listener.ChatMessageListener;
import com.rv.plugin.calendar.bean.PreRentDaysBean;
import com.rv.rvmine.MineFragment; import com.rv.rvmine.MineFragment;
import com.rv.share.WebViewActivity; import com.rv.share.WebViewActivity;
import com.rv.share.view.PromotionDialog; import com.rv.share.view.PromotionDialog;
...@@ -71,6 +75,7 @@ import com.rv.version.util.UpdateAppUtils; ...@@ -71,6 +75,7 @@ import com.rv.version.util.UpdateAppUtils;
import com.xxfc.discovery.DiscoveryFragment; import com.xxfc.discovery.DiscoveryFragment;
import com.xxfc.discovery.api.DiscoveryApi; import com.xxfc.discovery.api.DiscoveryApi;
import com.xxfc.discovery.bean.DiscoveryIMTokenBean; import com.xxfc.discovery.bean.DiscoveryIMTokenBean;
import com.xxfc.rv.other.RvActivityLifecycleCallbacks;
import com.yuyife.okgo.OkGoUtil; import com.yuyife.okgo.OkGoUtil;
import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.EventBus;
...@@ -90,7 +95,7 @@ import cn.jpush.android.api.BasicPushNotificationBuilder; ...@@ -90,7 +95,7 @@ import cn.jpush.android.api.BasicPushNotificationBuilder;
import cn.jpush.android.api.JPushInterface; import cn.jpush.android.api.JPushInterface;
public class MainActivity extends BaseActivity<CommonPresenter> implements DownListenerManager.DownListener { public class MainActivity extends BaseActivity<CommonPresenter> implements DownListenerManager.DownListener, ChatMessageListener {
private boolean hasGetVersionInfo = false; // 判断是否已经获取过版本信息 private boolean hasGetVersionInfo = false; // 判断是否已经获取过版本信息
...@@ -158,9 +163,9 @@ public class MainActivity extends BaseActivity<CommonPresenter> implements DownL ...@@ -158,9 +163,9 @@ public class MainActivity extends BaseActivity<CommonPresenter> implements DownL
AudioOrVideoController.init(getApplicationContext(), logoutListener); AudioOrVideoController.init(getApplicationContext(), logoutListener);
EventBus.getDefault().register(this); EventBus.getDefault().register(this);
DownListenerManager.getInstance().addDownListener(this); DownListenerManager.getInstance().addDownListener(this);
ListenerManager.getInstance().addChatMessageListener(this);
} }
@Override @Override
protected void initView(Bundle savedInstanceState, TitleView titleView, Intent intent) { protected void initView(Bundle savedInstanceState, TitleView titleView, Intent intent) {
updateAppUtils = UpdateAppUtils.from(MainActivity.this); updateAppUtils = UpdateAppUtils.from(MainActivity.this);
...@@ -220,8 +225,10 @@ public class MainActivity extends BaseActivity<CommonPresenter> implements DownL ...@@ -220,8 +225,10 @@ public class MainActivity extends BaseActivity<CommonPresenter> implements DownL
getActivityPopup(); getActivityPopup();
checkVersion(); checkVersion();
checkToken(); checkToken();
getPreRentDays();
} }
@Override @Override
public void onShowResult(int requestType, BaseBean result) { public void onShowResult(int requestType, BaseBean result) {
switch (requestType) { switch (requestType) {
...@@ -278,6 +285,21 @@ public class MainActivity extends BaseActivity<CommonPresenter> implements DownL ...@@ -278,6 +285,21 @@ public class MainActivity extends BaseActivity<CommonPresenter> implements DownL
initIm(); initIm();
} }
break; break;
case 6:
PreRentDaysBean daysBean = (PreRentDaysBean) result;
if (daysBean != null && daysBean.isRel() && daysBean.getData() != null &&
daysBean.getData().size() > 0) {
PreRentDaysBean.Data data = daysBean.getData().get(0);
if (data != null) {
try {
int value = Integer.parseInt(data.getParams());
AppCookie.save(mActivity, AppCookie.KEY_PRERENT_DAYS, value);
} catch (Exception e) {
showToast("传入的预租车天数格式有误");
}
}
}
break;
default: default:
break; break;
} }
...@@ -330,6 +352,13 @@ public class MainActivity extends BaseActivity<CommonPresenter> implements DownL ...@@ -330,6 +352,13 @@ public class MainActivity extends BaseActivity<CommonPresenter> implements DownL
} }
} }
/*****
* 获取提前租车天数
*/
private void getPreRentDays() {
mPresenter.getData(6, ApiConfig.HTTP_URL_PRERENT_DAYS, PreRentDaysBean.class, false);
}
private void postActivityPopup(int id) { private void postActivityPopup(int id) {
if (!TextUtils.isEmpty(OkGoUtil.getToken())) { if (!TextUtils.isEmpty(OkGoUtil.getToken())) {
Map<String, Object> map = new HashMap<>(); Map<String, Object> map = new HashMap<>();
...@@ -550,6 +579,7 @@ public class MainActivity extends BaseActivity<CommonPresenter> implements DownL ...@@ -550,6 +579,7 @@ public class MainActivity extends BaseActivity<CommonPresenter> implements DownL
public void onDestroy() { public void onDestroy() {
super.onDestroy(); super.onDestroy();
DownListenerManager.getInstance().removeDownListener(this); DownListenerManager.getInstance().removeDownListener(this);
ListenerManager.getInstance().removeChatMessageListener(this);
destory(); destory();
// unRegisterUpdateReceiver(); // unRegisterUpdateReceiver();
if (netReceiver != null) { if (netReceiver != null) {
...@@ -702,4 +732,26 @@ public class MainActivity extends BaseActivity<CommonPresenter> implements DownL ...@@ -702,4 +732,26 @@ public class MainActivity extends BaseActivity<CommonPresenter> implements DownL
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(i); startActivity(i);
} }
@Override
public void onMessageSendStateChange(int messageState, String msgId) {
}
@Override
public void onNewMessage(String fromUserId, ChatMessage message, boolean isGroupMsg) {
boolean canShow = true;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
canShow = false;
if (Settings.canDrawOverlays(this)) {
canShow = true;
}
}
if (canShow && (RvActivityLifecycleCallbacks.isAppBackground() || !RvActivityLifecycleCallbacks.isAppInChatView())) {
TitleTextWindow view = new TitleTextWindow(this);
view.show();
}
((HomeFragment) mAdapter.getItem(0)).newsComing();
((TourismFragment) mAdapter.getItem(1)).newsComing();
}
} }
...@@ -31,6 +31,7 @@ import com.squareup.leakcanary.LeakCanary; ...@@ -31,6 +31,7 @@ import com.squareup.leakcanary.LeakCanary;
import com.tencent.bugly.crashreport.CrashReport; import com.tencent.bugly.crashreport.CrashReport;
import com.umeng.commonsdk.UMConfigure; import com.umeng.commonsdk.UMConfigure;
import com.umeng.socialize.PlatformConfig; import com.umeng.socialize.PlatformConfig;
import com.xxfc.rv.other.RvActivityLifecycleCallbacks;
import com.yuyife.okgo.OkGoUtil; import com.yuyife.okgo.OkGoUtil;
import java.util.Locale; import java.util.Locale;
...@@ -125,6 +126,8 @@ public class RvClientApplication extends FrameApp { ...@@ -125,6 +126,8 @@ public class RvClientApplication extends FrameApp {
} }
LeakCanary.install(this);*/ LeakCanary.install(this);*/
/**********************************************/ /**********************************************/
registerActivityLifecycleCallbacks(new RvActivityLifecycleCallbacks());
} }
......
package com.xxfc.rv.other;
import android.app.Activity;
import android.app.Application;
import android.os.Bundle;
import com.rv.im.CustomerListActivity;
public class RvActivityLifecycleCallbacks implements Application.ActivityLifecycleCallbacks {
private static int ativiteCount;
private static boolean isInChatView; // app是否正在聊天模块
private static boolean isSpecialCases; // 是否处于特殊情况,例如相机,图片选择
@Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
if (CustomerListActivity.class.getSimpleName().equals(activity.getClass().getSimpleName())) {
isInChatView = true;
}
}
@Override
public void onActivityStarted(Activity activity) {
}
@Override
public void onActivityResumed(Activity activity) {
ativiteCount += 1;
}
@Override
public void onActivityPaused(Activity activity) {
ativiteCount -= 1;
}
@Override
public void onActivityStopped(Activity activity) {
}
@Override
public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
}
@Override
public void onActivityDestroyed(Activity activity) {
if (CustomerListActivity.class.getSimpleName().equals(activity.getClass().getSimpleName())) {
isInChatView = false;
}
}
public static boolean isAppBackground() {
return ativiteCount == 0 ? true : false && !isSpecialCases;
}
public static boolean isAppInChatView() {
return isInChatView;
}
public static boolean isIsSpecialCases() {
return isSpecialCases;
}
public static void setIsSpecialCases(boolean isSpecialCases) {
RvActivityLifecycleCallbacks.isSpecialCases = isSpecialCases;
}
}
...@@ -5,10 +5,15 @@ import android.content.SharedPreferences; ...@@ -5,10 +5,15 @@ import android.content.SharedPreferences;
import java.lang.ref.WeakReference; import java.lang.ref.WeakReference;
/*******
* 应用级别的cookie,不会随账号的切换而更改
*/
public class AppCookie { public class AppCookie {
private final static String COOKIE_FILE = "app_cookie"; private final static String COOKIE_FILE = "app_cookie";
public final static String KEY_PRERENT_DAYS = "key_prerent_days" ; // 提前租车天数的key
private static SharedPreferences preferences; private static SharedPreferences preferences;
private static WeakReference<Context> weakReference = null; private static WeakReference<Context> weakReference = null;
......
package com.rv.component.utils; import android.app.Activity;import android.bluetooth.BluetoothAdapter;import android.content.Context;import android.content.pm.PackageInfo;import android.content.pm.PackageManager;import android.net.wifi.WifiInfo;import android.net.wifi.WifiManager;import android.os.Build;import android.provider.Settings;import android.support.annotation.RequiresApi;import android.telephony.TelephonyManager;import android.text.TextUtils;import android.util.Base64;import android.util.DisplayMetrics; import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.text.DecimalFormat;import java.util.UUID; /** * 工具类 */public class Inc { /** * 线程睡眠 */ public static void sleep(long time) { try { Thread.sleep(time); } catch (Exception e) { } } /** * 对没有冒号分隔符的MAC地址加上: * * @param mac * @return */ public static String macAddFix(String mac) { String newMac = ""; try { for (int i = 0; i < mac.length(); i = i + 2) { newMac = newMac + mac.substring(i, i + 2) + ":"; } if (newMac.length() > 0) { newMac = newMac.substring(0, newMac.length() - 1); } } catch (Exception e) { e.printStackTrace(); } return newMac; } private static long lastClickTime; /** * 防止按钮频繁点击 * * @return true为是。 如果是在500ms内有点击过就返回true */ public synchronized static boolean isFastClick() { long time = System.currentTimeMillis(); if (time - lastClickTime < 500) { return true; } lastClickTime = time; return false; } /** * 将数字转换成两位小数字符串 * * @param price * @return */ public static String covertNumToStr(Number price) { String str = ""; try { DecimalFormat df = new DecimalFormat("0.00");//格式化小数 str = df.format(price);//返回的是String类型 } catch (Exception e) { e.printStackTrace(); } return str; } /** * 获取手机设备名称 * * @return */ public static String getDeviceName() { String deviceName = ""; try { deviceName = android.os.Build.MODEL; } catch (Exception e) { e.printStackTrace(); } return deviceName; } /** * 获取Android版本 6.0 * * @return */ public static String getReleaseVersion() { String releaseVersion = ""; try { releaseVersion = Build.VERSION.RELEASE; } catch (Exception e) { e.printStackTrace(); } return releaseVersion; } /** * 获取版本号 23 * * @return */ public static String getSdkVersion() { String sdkVersion= ""; try { sdkVersion= String.valueOf(Build.VERSION.SDK_INT); } catch (Exception e) { e.printStackTrace(); } return sdkVersion; } /** * 获取显示屏参数 * * @return */ @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR1) public static String getDeviceDisplay(Activity activity) { String deviceDisplay= ""; try { //deviceDisplay = Build.DISPLAY; DisplayMetrics metrics =new DisplayMetrics(); activity.getWindowManager().getDefaultDisplay().getRealMetrics(metrics); deviceDisplay=metrics.widthPixels + "*" +metrics.heightPixels; } catch (Exception e) { e.printStackTrace(); } return deviceDisplay; } /** * 获取手机制造商 * * @return */ public static String getDeviceProduct() { String deviceProduct= ""; try { //deviceProduct= Build.PRODUCT; deviceProduct= Build.MANUFACTURER; } catch (Exception e) { e.printStackTrace(); } return deviceProduct; } /** * 获取手机MAC * * @return */ public static String getMacAddress(Context context) { String macAddress = "" ; WifiManager wifi = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); WifiInfo info = wifi.getConnectionInfo(); String wifiMac = info.getMacAddress(); if (!TextUtils.isEmpty(wifiMac)&&!wifiMac.equals("02:00:00:00:00:00")) { macAddress = wifiMac; } return macAddress; } /** * 判断是否存在SD卡 * * @return */ public static boolean existSDCard() { if (android.os.Environment.getExternalStorageState().equals( android.os.Environment.MEDIA_MOUNTED)) { return true; } else return false; } /** * 将yyMMddHHmm两两拆分 * * @param date * @return yy MM dd HH mm */ public static byte[] splitDate(String date) { byte[] time = new byte[5]; try { for (int i = 0; i < time.length; i++) { String temp = date.substring(i * 2, i * 2 + 2); time[i] = (byte) Integer.parseInt(temp); } } catch (Exception e) { e.printStackTrace(); } return time; } /** * 获取程序版本号 * * @return */ public static String getAppVersion(Context context) { String version = ""; PackageManager manager = null; PackageInfo info = null; manager = context.getPackageManager(); try { info = manager.getPackageInfo(context.getPackageName(), 0); version = info.versionName; } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } return version; } /** * 将图片转换成Base64编码的字符串 */ public static String imageToBase64(String path){ if(TextUtils.isEmpty(path)){ return null; } InputStream is = null; byte[] data = null; String result = null; try{ is = new FileInputStream(path); //创建一个字符流大小的数组。 data = new byte[is.available()]; //写入数组 is.read(data); //用默认的编码格式进行编码 result = Base64.encodeToString(data,Base64.DEFAULT); }catch (Exception e){ e.printStackTrace(); }finally { if(null !=is){ try { is.close(); } catch (IOException e) { e.printStackTrace(); } } } return result; } /** * 手机号用****号隐藏中间数字 * * @param str 手机号码 * @return */ public static String settingphone(String str) { String phone = str.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2"); return phone; } /** * 邮箱用****号隐藏前面的字母 * * @param email 邮箱账号 * @return */ public static String settingemail(String email) { String emails = email.replaceAll("(\\w?)(\\w+)(\\w)(@\\w+\\.[a-z]+(\\.[a-z]+)?)", "$1****$3$4"); return emails; } /** * 身份证号用****号隐藏前面的字母 * * @param idCard 身份证号 * @return */ public static String settingID(String idCard) { String idCardHide = idCard.replaceAll("(\\d{4})\\d{10}(\\w{4})", "$1********$2"); return idCardHide; } } package com.rv.component.utils; import android.app.Activity;import android.bluetooth.BluetoothAdapter;import android.content.Context;import android.content.pm.PackageInfo;import android.content.pm.PackageManager;import android.net.wifi.WifiInfo;import android.net.wifi.WifiManager;import android.os.Build;import android.provider.Settings;import android.support.annotation.RequiresApi;import android.telephony.TelephonyManager;import android.text.TextUtils;import android.util.Base64;import android.util.DisplayMetrics; import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.lang.reflect.Method;import java.text.DecimalFormat;import java.util.UUID; /** * 工具类 */public class Inc { /** * 线程睡眠 */ public static void sleep(long time) { try { Thread.sleep(time); } catch (Exception e) { } } /** * 对没有冒号分隔符的MAC地址加上: * * @param mac * @return */ public static String macAddFix(String mac) { String newMac = ""; try { for (int i = 0; i < mac.length(); i = i + 2) { newMac = newMac + mac.substring(i, i + 2) + ":"; } if (newMac.length() > 0) { newMac = newMac.substring(0, newMac.length() - 1); } } catch (Exception e) { e.printStackTrace(); } return newMac; } private static long lastClickTime; /** * 防止按钮频繁点击 * * @return true为是。 如果是在500ms内有点击过就返回true */ public synchronized static boolean isFastClick() { long time = System.currentTimeMillis(); if (time - lastClickTime < 500) { return true; } lastClickTime = time; return false; } /** * 将数字转换成两位小数字符串 * * @param price * @return */ public static String covertNumToStr(Number price) { String str = ""; try { DecimalFormat df = new DecimalFormat("0.00");//格式化小数 str = df.format(price);//返回的是String类型 } catch (Exception e) { e.printStackTrace(); } return str; } /** * 获取手机设备名称 * * @return */ public static String getDeviceName() { String deviceName = ""; try { deviceName = android.os.Build.MODEL; } catch (Exception e) { e.printStackTrace(); } return deviceName; } /** * 获取Android版本 6.0 * * @return */ public static String getReleaseVersion() { String releaseVersion = ""; try { releaseVersion = Build.VERSION.RELEASE; } catch (Exception e) { e.printStackTrace(); } return releaseVersion; } /** * 获取版本号 23 * * @return */ public static String getSdkVersion() { String sdkVersion = ""; try { sdkVersion = String.valueOf(Build.VERSION.SDK_INT); } catch (Exception e) { e.printStackTrace(); } return sdkVersion; } /** * 获取显示屏参数 * * @return */ @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR1) public static String getDeviceDisplay(Activity activity) { String deviceDisplay = ""; try { //deviceDisplay = Build.DISPLAY; DisplayMetrics metrics = new DisplayMetrics(); activity.getWindowManager().getDefaultDisplay().getRealMetrics(metrics); deviceDisplay = metrics.widthPixels + "*" + metrics.heightPixels; } catch (Exception e) { e.printStackTrace(); } return deviceDisplay; } /** * 获取手机制造商 * * @return */ public static String getDeviceProduct() { String deviceProduct = ""; try { //deviceProduct= Build.PRODUCT; deviceProduct = Build.MANUFACTURER; } catch (Exception e) { e.printStackTrace(); } return deviceProduct; } /** * 获取手机MAC * * @return */ public static String getMacAddress(Context context) { String macAddress = ""; WifiManager wifi = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); WifiInfo info = wifi.getConnectionInfo(); String wifiMac = info.getMacAddress(); if (!TextUtils.isEmpty(wifiMac) && !wifiMac.equals("02:00:00:00:00:00")) { macAddress = wifiMac; } return macAddress; } /** * 判断是否存在SD卡 * * @return */ public static boolean existSDCard() { if (android.os.Environment.getExternalStorageState().equals( android.os.Environment.MEDIA_MOUNTED)) { return true; } else return false; } /** * 将yyMMddHHmm两两拆分 * * @param date * @return yy MM dd HH mm */ public static byte[] splitDate(String date) { byte[] time = new byte[5]; try { for (int i = 0; i < time.length; i++) { String temp = date.substring(i * 2, i * 2 + 2); time[i] = (byte) Integer.parseInt(temp); } } catch (Exception e) { e.printStackTrace(); } return time; } /** * 获取程序版本号 * * @return */ public static String getAppVersion(Context context) { String version = ""; PackageManager manager = null; PackageInfo info = null; manager = context.getPackageManager(); try { info = manager.getPackageInfo(context.getPackageName(), 0); version = info.versionName; } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } return version; } /** * 将图片转换成Base64编码的字符串 */ public static String imageToBase64(String path) { if (TextUtils.isEmpty(path)) { return null; } InputStream is = null; byte[] data = null; String result = null; try { is = new FileInputStream(path); //创建一个字符流大小的数组。 data = new byte[is.available()]; //写入数组 is.read(data); //用默认的编码格式进行编码 result = Base64.encodeToString(data, Base64.DEFAULT); } catch (Exception e) { e.printStackTrace(); } finally { if (null != is) { try { is.close(); } catch (IOException e) { e.printStackTrace(); } } } return result; } /** * 手机号用****号隐藏中间数字 * * @param str 手机号码 * @return */ public static String settingphone(String str) { String phone = str.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2"); return phone; } /** * 邮箱用****号隐藏前面的字母 * * @param email 邮箱账号 * @return */ public static String settingemail(String email) { String emails = email.replaceAll("(\\w?)(\\w+)(\\w)(@\\w+\\.[a-z]+(\\.[a-z]+)?)", "$1****$3$4"); return emails; } /** * 身份证号用****号隐藏前面的字母 * * @param idCard 身份证号 * @return */ public static String settingID(String idCard) { String idCardHide = idCard.replaceAll("(\\d{4})\\d{10}(\\w{4})", "$1********$2"); return idCardHide; } /******** * 设置程序不在前端的特殊情况 * @param b */ public static void setIsSpecialCases(boolean b) { Class<?> threadClazz = null; try { threadClazz = Class.forName("com.xxfc.rv.other.RvActivityLifecycleCallbacks"); Method method = threadClazz.getMethod("setIsSpecialCases", Boolean.class); method.invoke(null, b); } catch (Exception e) { e.printStackTrace(); } } }
\ No newline at end of file \ No newline at end of file
......
...@@ -211,7 +211,7 @@ public class CampDetailActivity extends BaseStatusActivity<CampPresenter> { ...@@ -211,7 +211,7 @@ public class CampDetailActivity extends BaseStatusActivity<CampPresenter> {
public void onViewClicked(View view) { public void onViewClicked(View view) {
int id = view.getId(); int id = view.getId();
if (id == R.id.tv_scheduled_camp) { if (id == R.id.tv_scheduled_camp) {
if (data.getData() != null && data.getData().getPhone() != null) { if (data != null && data.getData() != null && data.getData().getPhone() != null) {
Intent intent = new Intent(Intent.ACTION_DIAL); Intent intent = new Intent(Intent.ACTION_DIAL);
Uri uri = Uri.parse("tel:" + data.getData().getPhone()); Uri uri = Uri.parse("tel:" + data.getData().getPhone());
intent.setData(uri); intent.setData(uri);
......
...@@ -166,4 +166,6 @@ public class ApiConfig { ...@@ -166,4 +166,6 @@ public class ApiConfig {
* 获取价格日历 * 获取价格日历
*/ */
public static String HTTP_URL_CALENDAR_PRICE = RvFrameConfig.HOST + "/vehicle/vehicle_model/calendar_price/app/unauth/list/"; public static String HTTP_URL_CALENDAR_PRICE = RvFrameConfig.HOST + "/vehicle/vehicle_model/calendar_price/app/unauth/list/";
public static String HTTP_URL_PRERENT_DAYS = RvFrameConfig.HOST + "/api/app/cofig/app/unauth/types?types=999";
} }
...@@ -17,6 +17,7 @@ import android.view.View; ...@@ -17,6 +17,7 @@ import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.view.WindowManager; import android.view.WindowManager;
import android.widget.CheckBox; import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.LinearLayout; import android.widget.LinearLayout;
import android.widget.PopupWindow; import android.widget.PopupWindow;
...@@ -150,6 +151,8 @@ public class ConfirmOrderActivity extends BaseStatusActivity<CommonPresenter> { ...@@ -150,6 +151,8 @@ public class ConfirmOrderActivity extends BaseStatusActivity<CommonPresenter> {
TextView tvCouponAmount; TextView tvCouponAmount;
@BindView(R2.id.rv_content_select) @BindView(R2.id.rv_content_select)
FlowLayout rvContentSelect; FlowLayout rvContentSelect;
@BindView(R2.id.edt_inviter_phone)
EditText edtInviterPhone;
@BindView(R2.id.tv_mark) @BindView(R2.id.tv_mark)
TextView tvMark; TextView tvMark;
...@@ -506,6 +509,12 @@ public class ConfirmOrderActivity extends BaseStatusActivity<CommonPresenter> { ...@@ -506,6 +509,12 @@ public class ConfirmOrderActivity extends BaseStatusActivity<CommonPresenter> {
showToast("请同意预定须知"); showToast("请同意预定须知");
return; return;
} }
String inviterPhone = edtInviterPhone.getText().toString().trim() ;
if(!TextUtils.isEmpty(inviterPhone) && inviterPhone.length() != 11){
showToast("请输入正确的邀请人手机号");
return;
}
dataBean.setFacilitatePhone(inviterPhone);
payType = 1; payType = 1;
new PaymentTypeSelection(mActivity) { new PaymentTypeSelection(mActivity) {
......
...@@ -241,6 +241,8 @@ public class HomeFragment extends BaseFragment<HomePresenter> implements Observa ...@@ -241,6 +241,8 @@ public class HomeFragment extends BaseFragment<HomePresenter> implements Observa
private int countPage; private int countPage;
private int mPage; private int mPage;
private boolean hasNewMessage ;
public static HomeFragment getInstance(int type) { public static HomeFragment getInstance(int type) {
Bundle bundl = new Bundle(); Bundle bundl = new Bundle();
bundl.putInt("type", type); bundl.putInt("type", type);
...@@ -874,6 +876,12 @@ public class HomeFragment extends BaseFragment<HomePresenter> implements Observa ...@@ -874,6 +876,12 @@ public class HomeFragment extends BaseFragment<HomePresenter> implements Observa
scrollview.fullScroll(View.FOCUS_UP); scrollview.fullScroll(View.FOCUS_UP);
} else if (id == R.id.iv_home_travel_server_image) { } else if (id == R.id.iv_home_travel_server_image) {
if (isLogin()) { if (isLogin()) {
hasNewMessage = false ;
if (llItemTop.getVisibility() != View.VISIBLE) {
travelServerImage.setImageResource(R.drawable.rv_rentingcar_icon_service_white);
} else {
travelServerImage.setImageResource(R.drawable.rentingcar_icon_service_orangeorange);
}
ComponentName name = new ComponentName(getActivity(), "com.rv.im.CustomerListActivity"); ComponentName name = new ComponentName(getActivity(), "com.rv.im.CustomerListActivity");
Intent intent = new Intent(); Intent intent = new Intent();
intent.putExtra("login_user_id", Cookie.getStringValue(getContext(), SPConstance.USER_JSON_IMUSERID)); intent.putExtra("login_user_id", Cookie.getStringValue(getContext(), SPConstance.USER_JSON_IMUSERID));
...@@ -1247,6 +1255,11 @@ public class HomeFragment extends BaseFragment<HomePresenter> implements Observa ...@@ -1247,6 +1255,11 @@ public class HomeFragment extends BaseFragment<HomePresenter> implements Observa
//只是layout背景透明(仿知乎滑动效果) //只是layout背景透明(仿知乎滑动效果)
llItemSearch.setBackground(getResources().getDrawable(R.drawable.shape_rv_textview_home_translucent)); llItemSearch.setBackground(getResources().getDrawable(R.drawable.shape_rv_textview_home_translucent));
travelCityText.setTextColor(getResources().getColor(R.color.colorWrite)); travelCityText.setTextColor(getResources().getColor(R.color.colorWrite));
// if(hasNewMessage){
// travelServerImage.setImageResource(R.drawable.rv_rentingcar_icon_service_white_news);
// }else {
// travelServerImage.setImageResource(R.drawable.rv_rentingcar_icon_service_white);
// }
travelServerImage.setImageResource(R.drawable.rv_rentingcar_icon_service_white); travelServerImage.setImageResource(R.drawable.rv_rentingcar_icon_service_white);
ivTravelCityTextHint.setImageResource(R.drawable.rv_common_icon_up_arrow2); ivTravelCityTextHint.setImageResource(R.drawable.rv_common_icon_up_arrow2);
ivSearchInputHint.setImageResource(R.drawable.rv_common_icon_search2); ivSearchInputHint.setImageResource(R.drawable.rv_common_icon_search2);
...@@ -1259,6 +1272,11 @@ public class HomeFragment extends BaseFragment<HomePresenter> implements Observa ...@@ -1259,6 +1272,11 @@ public class HomeFragment extends BaseFragment<HomePresenter> implements Observa
} else { } else {
llItemTop.setVisibility(View.VISIBLE); llItemTop.setVisibility(View.VISIBLE);
llItemSearch.setBackground(getResources().getDrawable(R.drawable.shape_rv_textview_home_search)); llItemSearch.setBackground(getResources().getDrawable(R.drawable.shape_rv_textview_home_search));
// if(hasNewMessage){
// travelServerImage.setImageResource(R.drawable.rentingcar_icon_service_orangeorange_news);
// }else{
// travelServerImage.setImageResource(R.drawable.rentingcar_icon_service_orangeorange);
// }
travelServerImage.setImageResource(R.drawable.rentingcar_icon_service_orangeorange); travelServerImage.setImageResource(R.drawable.rentingcar_icon_service_orangeorange);
travelCityText.setTextColor(getResources().getColor(R.color.colorMain)); travelCityText.setTextColor(getResources().getColor(R.color.colorMain));
ivTravelCityTextHint.setImageResource(R.drawable.rv_common_icon_up_arrow); ivTravelCityTextHint.setImageResource(R.drawable.rv_common_icon_up_arrow);
...@@ -1381,6 +1399,18 @@ public class HomeFragment extends BaseFragment<HomePresenter> implements Observa ...@@ -1381,6 +1399,18 @@ public class HomeFragment extends BaseFragment<HomePresenter> implements Observa
}); });
} }
/******
* 新消息
*/
public void newsComing() {
// hasNewMessage = true ;
// if (llItemTop.getVisibility() != View.VISIBLE) {
// travelServerImage.setImageResource(R.drawable.rv_rentingcar_icon_service_white_news);
// } else {
// travelServerImage.setImageResource(R.drawable.rentingcar_icon_service_orangeorange_news);
// }
}
@Override @Override
public void onDestroy() { public void onDestroy() {
super.onDestroy(); super.onDestroy();
......
...@@ -51,6 +51,7 @@ public class OrderDataBean implements Serializable{ ...@@ -51,6 +51,7 @@ public class OrderDataBean implements Serializable{
private int damageSafe;//是否购买免赔 1--是 0--否 private int damageSafe;//是否购买免赔 1--是 0--否
private int rentFreeDay;//是否使用出租免费天数 1--是 0--否 private int rentFreeDay;//是否使用出租免费天数 1--是 0--否
private String tickerNos;//优惠券ids,逗号分割 private String tickerNos;//优惠券ids,逗号分割
private String facilitatePhone ; // 促成人手机号
private List<String> accompanyStrs; //随车物品参数 private List<String> accompanyStrs; //随车物品参数
public int getDayNum() { public int getDayNum() {
...@@ -199,6 +200,14 @@ public class OrderDataBean implements Serializable{ ...@@ -199,6 +200,14 @@ public class OrderDataBean implements Serializable{
this.accompanyStrs = accompanyStrs; this.accompanyStrs = accompanyStrs;
} }
public String getFacilitatePhone() {
return facilitatePhone;
}
public void setFacilitatePhone(String facilitatePhone) {
this.facilitatePhone = facilitatePhone;
}
@Override @Override
public String toString() { public String toString() {
return "OrderDataBean{" + return "OrderDataBean{" +
......
...@@ -790,6 +790,38 @@ ...@@ -790,6 +790,38 @@
android:textSize="@dimen/text_10" /> android:textSize="@dimen/text_10" />
</RelativeLayout> </RelativeLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/size_15"
android:background="@color/colorWrite"
android:padding="@dimen/size_15">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_weight="1"
android:text="@string/rv_inviter_phone"
android:textColor="@color/textMain"
android:textSize="@dimen/text_16" />
<EditText
android:inputType="phone"
android:maxLength="11"
android:id="@+id/edt_inviter_phone"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:background="@color/colorWrite"
android:gravity="center_vertical"
android:hint="请输入邀请人手机号"
android:textColor="@color/text_Gray"
android:textSize="@dimen/text_12" />
</RelativeLayout>
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
......
...@@ -93,6 +93,8 @@ ...@@ -93,6 +93,8 @@
<string name="rv_passenger_security">乘客座位保障</string> <string name="rv_passenger_security">乘客座位保障</string>
<string name="rv_personal_safety">保人身安全</string> <string name="rv_personal_safety">保人身安全</string>
<string name="rv_reservation_know">预定须知</string> <string name="rv_reservation_know">预定须知</string>
<string name="rv_inviter_phone">内部邀请人</string>
<string name="rv_agreed_reservation_know">同意预定须知和</string> <string name="rv_agreed_reservation_know">同意预定须知和</string>
<string name="rv_contract_agreement">《合同协议》</string> <string name="rv_contract_agreement">《合同协议》</string>
<string name="rv_driving">驾驶人</string> <string name="rv_driving">驾驶人</string>
......
...@@ -5,7 +5,6 @@ import android.content.ComponentName; ...@@ -5,7 +5,6 @@ import android.content.ComponentName;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.graphics.Rect; import android.graphics.Rect;
import android.net.Uri;
import android.os.Build; import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
...@@ -28,10 +27,8 @@ import com.baidu.mapapi.search.geocode.GeoCodeResult; ...@@ -28,10 +27,8 @@ import com.baidu.mapapi.search.geocode.GeoCodeResult;
import com.baidu.mapapi.search.geocode.GeoCoder; import com.baidu.mapapi.search.geocode.GeoCoder;
import com.baidu.mapapi.search.geocode.OnGetGeoCoderResultListener; import com.baidu.mapapi.search.geocode.OnGetGeoCoderResultListener;
import com.baidu.mapapi.search.geocode.ReverseGeoCodeResult; import com.baidu.mapapi.search.geocode.ReverseGeoCodeResult;
import com.base.utils.tools.android.IntentUtil;
import com.chad.library.adapter.base.BaseQuickAdapter; import com.chad.library.adapter.base.BaseQuickAdapter;
import com.ruiwenliu.wrapper.SPConstance; import com.ruiwenliu.wrapper.SPConstance;
import com.ruiwenliu.wrapper.browse.ActivityImageBrowseUrl;
import com.frame.base.url.Constance; import com.frame.base.url.Constance;
import com.ruiwenliu.wrapper.base.BaseBean; import com.ruiwenliu.wrapper.base.BaseBean;
import com.ruiwenliu.wrapper.base.BaseFragment; import com.ruiwenliu.wrapper.base.BaseFragment;
...@@ -49,7 +46,6 @@ import com.rv.tourism.api.TourismApi; ...@@ -49,7 +46,6 @@ import com.rv.tourism.api.TourismApi;
import com.rv.tourism.bean.BeanPopularBrigade; import com.rv.tourism.bean.BeanPopularBrigade;
import com.rv.tourism.bean.BeanPopularBrigadeAll; import com.rv.tourism.bean.BeanPopularBrigadeAll;
import com.rv.tourism.bean.BeanTourAround; import com.rv.tourism.bean.BeanTourAround;
import com.rv.tourism.bean.BeanTourDetail;
import com.rv.tourism.bean.BeanTourismBanner; import com.rv.tourism.bean.BeanTourismBanner;
import com.rv.tourism.other.PopularTourListActivity; import com.rv.tourism.other.PopularTourListActivity;
...@@ -67,7 +63,7 @@ import java.util.List; ...@@ -67,7 +63,7 @@ import java.util.List;
import butterknife.BindView; import butterknife.BindView;
import butterknife.OnClick; import butterknife.OnClick;
import io.reactivex.functions.Consumer; import io.reactivex.functions.Consumer;
import pub.devrel.easypermissions.AppSettingsDialog;
/** /**
* 旅游 * 旅游
...@@ -93,6 +89,8 @@ public class TourismFragment extends BaseFragment<TourismPresenter> implements S ...@@ -93,6 +89,8 @@ public class TourismFragment extends BaseFragment<TourismPresenter> implements S
LinearLayout llLayoutPopularMore; LinearLayout llLayoutPopularMore;
@BindView(R2.id.refresh) @BindView(R2.id.refresh)
SimpleRefreshLayout mSimpleRefreshLayout; SimpleRefreshLayout mSimpleRefreshLayout;
@BindView(R2.id.travel_server_image)
ImageView ImgTravelServer;
private ArrayList<String> images = new ArrayList<>(); //图片(默认采用网络地址) private ArrayList<String> images = new ArrayList<>(); //图片(默认采用网络地址)
...@@ -112,6 +110,8 @@ public class TourismFragment extends BaseFragment<TourismPresenter> implements S ...@@ -112,6 +110,8 @@ public class TourismFragment extends BaseFragment<TourismPresenter> implements S
private LocationManager locationManager; private LocationManager locationManager;
private GeoCoder geoCoder; private GeoCoder geoCoder;
private boolean hasNewMessage;
public static TourismFragment getInstance(int type) { public static TourismFragment getInstance(int type) {
Bundle bundl = new Bundle(); Bundle bundl = new Bundle();
...@@ -234,6 +234,9 @@ public class TourismFragment extends BaseFragment<TourismPresenter> implements S ...@@ -234,6 +234,9 @@ public class TourismFragment extends BaseFragment<TourismPresenter> implements S
.navigation(); .navigation();
} else if (id == R.id.travel_server_image) { } else if (id == R.id.travel_server_image) {
if (isLogin()) { if (isLogin()) {
hasNewMessage = false;
ImgTravelServer.setImageResource(R.drawable.common_journey_service_gray);
ComponentName name = new ComponentName(getActivity(), "com.rv.im.CustomerListActivity"); ComponentName name = new ComponentName(getActivity(), "com.rv.im.CustomerListActivity");
Intent intent = new Intent(); Intent intent = new Intent();
intent.putExtra("login_user_id", Cookie.getStringValue(getContext(), SPConstance.USER_JSON_IMUSERID)); intent.putExtra("login_user_id", Cookie.getStringValue(getContext(), SPConstance.USER_JSON_IMUSERID));
...@@ -436,6 +439,11 @@ public class TourismFragment extends BaseFragment<TourismPresenter> implements S ...@@ -436,6 +439,11 @@ public class TourismFragment extends BaseFragment<TourismPresenter> implements S
travelBanner.updateBannerStyle(BannerConfig.CIRCLE_INDICATOR); travelBanner.updateBannerStyle(BannerConfig.CIRCLE_INDICATOR);
} }
public void newsComing() {
// hasNewMessage = true;
// ImgTravelServer.setImageResource(R.drawable.common_journey_service_gray_news);
}
@Override @Override
public void onDestroy() { public void onDestroy() {
......
...@@ -120,6 +120,8 @@ public class TravelerConfirmOrderActivity extends BaseStatusActivity<TourismPres ...@@ -120,6 +120,8 @@ public class TravelerConfirmOrderActivity extends BaseStatusActivity<TourismPres
LinearLayout llBottom; LinearLayout llBottom;
@BindView(R2.id.tv_coupon_amount) @BindView(R2.id.tv_coupon_amount)
TextView tvCouponAmount; TextView tvCouponAmount;
@BindView(R2.id.edt_inviter_phone)
EditText edtInviterPhone;
private static final int SDK_ALI_PAY_FLAG = 11; private static final int SDK_ALI_PAY_FLAG = 11;
private BeanOrderParam dataBean; private BeanOrderParam dataBean;
...@@ -143,6 +145,8 @@ public class TravelerConfirmOrderActivity extends BaseStatusActivity<TourismPres ...@@ -143,6 +145,8 @@ public class TravelerConfirmOrderActivity extends BaseStatusActivity<TourismPres
private double couponAmount = 0; //优惠券金额 private double couponAmount = 0; //优惠券金额
private String status = "1";// 优惠券状态 private String status = "1";// 优惠券状态
private String inviterPhone ;
private List<String> couponIdList = new ArrayList<>(); //选中优惠券 private List<String> couponIdList = new ArrayList<>(); //选中优惠券
...@@ -419,7 +423,7 @@ public class TravelerConfirmOrderActivity extends BaseStatusActivity<TourismPres ...@@ -419,7 +423,7 @@ public class TravelerConfirmOrderActivity extends BaseStatusActivity<TourismPres
.withSerializable("selectCoupon", JSON.toJSONString(selectCouponList)) .withSerializable("selectCoupon", JSON.toJSONString(selectCouponList))
.navigation(this, 134); .navigation(this, 134);
} }
}else if (id == R.id.iv_item_insurance_information){ } else if (id == R.id.iv_item_insurance_information) {
//保险说明 //保险说明
ARouter.getInstance().build(Constance.ACTIVITY_URL_WEBVIEW) ARouter.getInstance().build(Constance.ACTIVITY_URL_WEBVIEW)
.withString("title", "保险说明") .withString("title", "保险说明")
...@@ -491,6 +495,17 @@ public class TravelerConfirmOrderActivity extends BaseStatusActivity<TourismPres ...@@ -491,6 +495,17 @@ public class TravelerConfirmOrderActivity extends BaseStatusActivity<TourismPres
return; return;
} }
inviterPhone = edtInviterPhone.getText().toString().trim();
if (!TextUtils.isEmpty(inviterPhone) && inviterPhone.length() != 11) {
showToast("请输入正确的邀请人手机号");
edtInviterPhone.setFocusable(true);
edtInviterPhone.setFocusableInTouchMode(true);
edtInviterPhone.requestFocus();
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
edtInviterPhone.setSelection(inviterPhone.length());
return;
}
payType = 1; payType = 1;
new PaymentTypeSelection(mActivity) { new PaymentTypeSelection(mActivity) {
@Override @Override
...@@ -537,7 +552,7 @@ public class TravelerConfirmOrderActivity extends BaseStatusActivity<TourismPres ...@@ -537,7 +552,7 @@ public class TravelerConfirmOrderActivity extends BaseStatusActivity<TourismPres
Map<String, Object> headMap = new LinkedHashMap<>(); Map<String, Object> headMap = new LinkedHashMap<>();
if (OkGoUtil.getToken() != null) if (OkGoUtil.getToken() != null)
headMap.put("Authorization", OkGoUtil.getToken()); headMap.put("Authorization", OkGoUtil.getToken());
mPresenter.postBodyData(RvFrameConfig.ADMIN_POST, 0, TourismApi.COMMIT_ORDER, BeanTourOrderResponse.class, new Tourist(etMailbox.getText().toString().trim(), name, phone, dataBean.getEndAddr(), endTime, dataBean.getGoodId(), ids, dataBean.getSpePriceId(), dataBean.getStartAddr(), dataBean.getStartCompanyId(), startTime, dataBean.getSiteId(), isInsuranceType, couponIds), headMap, true); mPresenter.postBodyData(RvFrameConfig.ADMIN_POST, 0, TourismApi.COMMIT_ORDER, BeanTourOrderResponse.class, new Tourist(etMailbox.getText().toString().trim(), name, phone, dataBean.getEndAddr(), endTime, dataBean.getGoodId(), ids, dataBean.getSpePriceId(), dataBean.getStartAddr(), dataBean.getStartCompanyId(), startTime, dataBean.getSiteId(), isInsuranceType, couponIds,inviterPhone), headMap, true);
} }
...@@ -739,8 +754,9 @@ public class TravelerConfirmOrderActivity extends BaseStatusActivity<TourismPres ...@@ -739,8 +754,9 @@ public class TravelerConfirmOrderActivity extends BaseStatusActivity<TourismPres
private String siteId; private String siteId;
private int hasInsure; private int hasInsure;
private String tickerNos; private String tickerNos;
private String facilitatePhone;
public Tourist(String contactEmail, String contactMan, String contactPhone, String endAddr, String endTime, String goodId, String tourUserIds, String spePriceId, String startAddr, String startCompanyId, String startTime, String siteId, int hasInsure, String tickerNos) { public Tourist(String contactEmail, String contactMan, String contactPhone, String endAddr, String endTime, String goodId, String tourUserIds, String spePriceId, String startAddr, String startCompanyId, String startTime, String siteId, int hasInsure, String tickerNos, String facilitatePhone) {
this.contactEmail = contactEmail; this.contactEmail = contactEmail;
this.contactMan = contactMan; this.contactMan = contactMan;
this.contactPhone = contactPhone; this.contactPhone = contactPhone;
...@@ -755,6 +771,7 @@ public class TravelerConfirmOrderActivity extends BaseStatusActivity<TourismPres ...@@ -755,6 +771,7 @@ public class TravelerConfirmOrderActivity extends BaseStatusActivity<TourismPres
this.siteId = siteId; this.siteId = siteId;
this.hasInsure = hasInsure; this.hasInsure = hasInsure;
this.tickerNos = tickerNos; this.tickerNos = tickerNos;
this.facilitatePhone = facilitatePhone;
} }
public String getContactEmail() { public String getContactEmail() {
...@@ -868,6 +885,14 @@ public class TravelerConfirmOrderActivity extends BaseStatusActivity<TourismPres ...@@ -868,6 +885,14 @@ public class TravelerConfirmOrderActivity extends BaseStatusActivity<TourismPres
public void setTickerNos(String tickerNos) { public void setTickerNos(String tickerNos) {
this.tickerNos = tickerNos; this.tickerNos = tickerNos;
} }
public String getFacilitatePhone() {
return facilitatePhone;
}
public void setFacilitatePhone(String facilitatePhone) {
this.facilitatePhone = facilitatePhone;
}
} }
public class payBody { public class payBody {
......
...@@ -457,6 +457,37 @@ ...@@ -457,6 +457,37 @@
android:src="@drawable/tourism_rv_common_icon_notice" /> android:src="@drawable/tourism_rv_common_icon_notice" />
</RelativeLayout> </RelativeLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/size_15"
android:background="@color/colorWrite"
android:padding="@dimen/size_15">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_weight="1"
android:text="内部邀请人"
android:textColor="@color/textMain"
android:textSize="@dimen/text_16" />
<EditText
android:inputType="phone"
android:maxLength="11"
android:id="@+id/edt_inviter_phone"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:background="@color/colorWrite"
android:gravity="center_vertical|right"
android:hint="请输入邀请人手机号"
android:textColor="@color/text_Gray"
android:textSize="@dimen/text_12" />
</RelativeLayout>
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="@dimen/size_40" android:layout_height="@dimen/size_40"
......
...@@ -15,6 +15,8 @@ import com.ruiwenliu.wrapper.base.BaseBean; ...@@ -15,6 +15,8 @@ import com.ruiwenliu.wrapper.base.BaseBean;
import com.ruiwenliu.wrapper.base.BaseStatusActivity; import com.ruiwenliu.wrapper.base.BaseStatusActivity;
import com.ruiwenliu.wrapper.weight.TitleView; import com.ruiwenliu.wrapper.weight.TitleView;
import com.rv.component.control.WheelView; import com.rv.component.control.WheelView;
import com.rv.component.utils.AppCookie;
import com.rv.component.utils.Cookie;
import com.rv.component.utils.DateUtils; import com.rv.component.utils.DateUtils;
import com.rv.component.utils.MyUtils; import com.rv.component.utils.MyUtils;
import com.rv.plugin.calendar.bean.DateInfo; import com.rv.plugin.calendar.bean.DateInfo;
...@@ -57,7 +59,7 @@ public class CalendarActivity extends BaseStatusActivity<CalendarPresenter> { ...@@ -57,7 +59,7 @@ public class CalendarActivity extends BaseStatusActivity<CalendarPresenter> {
/** /**
* 最大的日历期限 * 最大的日历期限
*/ */
private final int MAX_SPAN = 30; private int MAX_SPAN;
private int spanIndex = 1; private int spanIndex = 1;
...@@ -74,7 +76,6 @@ public class CalendarActivity extends BaseStatusActivity<CalendarPresenter> { ...@@ -74,7 +76,6 @@ public class CalendarActivity extends BaseStatusActivity<CalendarPresenter> {
public static Intent getIntent(Context context) { public static Intent getIntent(Context context) {
return new Intent(context, CalendarActivity.class); return new Intent(context, CalendarActivity.class);
} }
@Override @Override
...@@ -82,7 +83,7 @@ public class CalendarActivity extends BaseStatusActivity<CalendarPresenter> { ...@@ -82,7 +83,7 @@ public class CalendarActivity extends BaseStatusActivity<CalendarPresenter> {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
ButterKnife.bind(this); ButterKnife.bind(this);
context = this; context = this;
MAX_SPAN = AppCookie.getIntValue(context,AppCookie.KEY_PRERENT_DAYS,30);
begDay = DateUtils.formatDate16(begDate); begDay = DateUtils.formatDate16(begDate);
begTime = DateUtils.formatDate17(begDate); begTime = DateUtils.formatDate17(begDate);
endDay = DateUtils.formatDate16(endDate); endDay = DateUtils.formatDate16(endDate);
......
package com.rv.plugin.calendar.bean;
import android.text.Html;
import com.ruiwenliu.wrapper.base.BaseBean;
import java.util.List;
public class PreRentDaysBean extends BaseBean {
private boolean rel;
private List<Data> data;
public boolean isRel() {
return rel;
}
public void setRel(boolean rel) {
this.rel = rel;
}
public List<Data> getData() {
return data;
}
public void setData(List<Data> data) {
this.data = data;
}
public class Data {
private int id;
private int type;
private String value;
private long crtTime;
private long updTime;
private int isDel;
private String title;
private String params ;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getType() {
return type;
}
public void setType(int type) {
this.type = type;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = Html.fromHtml(value).toString();
}
public long getCrtTime() {
return crtTime;
}
public void setCrtTime(long crtTime) {
this.crtTime = crtTime;
}
public long getUpdTime() {
return updTime;
}
public void setUpdTime(long updTime) {
this.updTime = updTime;
}
public int getIsDel() {
return isDel;
}
public void setIsDel(int isDel) {
this.isDel = isDel;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getParams() {
return params;
}
public void setParams(String params) {
this.params = params;
}
}
}
package com.xxrv.coupon.fragment; package com.xxrv.coupon.fragment;
import android.content.ComponentName;
import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView; import android.support.v7.widget.RecyclerView;
...@@ -21,6 +24,7 @@ import com.yuyife.okgo.OkGoUtil; ...@@ -21,6 +24,7 @@ import com.yuyife.okgo.OkGoUtil;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
import java.util.Map; import java.util.Map;
import butterknife.BindView; import butterknife.BindView;
/** /**
...@@ -63,14 +67,16 @@ public class WaitCouponFragment extends BaseFragment<CouponAllPresenter> impleme ...@@ -63,14 +67,16 @@ public class WaitCouponFragment extends BaseFragment<CouponAllPresenter> impleme
@Override @Override
public void onItemClick(BaseQuickAdapter adapter, View view, int position) { public void onItemClick(BaseQuickAdapter adapter, View view, int position) {
CouponBean.DataBean bean = (CouponBean.DataBean) adapter.getItem(position); CouponBean.DataBean bean = (CouponBean.DataBean) adapter.getItem(position);
if ("0".equals(bean.getChannel()) || "1".equals(bean.getChannel())){ //0-全平台;1-租车;2-旅游;3-营地 if ("0".equals(bean.getChannel()) || "1".equals(bean.getChannel())) { //0-全平台;1-租车;2-旅游;3-营地
_mActivity.finish(); Intent intent = new Intent();
SwitchFragment.sChangeFragment.changge(0); intent.setComponent(new ComponentName(getContext(), "com.xxfc.rv.MainActivity"));
intent.putExtra("to", "home");
}else if ("2".equals(bean.getChannel())){ startActivity(intent);
_mActivity.finish(); } else if ("2".equals(bean.getChannel())) {
SwitchFragment.sChangeFragment.changge(1); Intent intent = new Intent();
intent.setComponent(new ComponentName(getContext(), "com.xxfc.rv.MainActivity"));
intent.putExtra("to", "travel");
startActivity(intent);
} }
} }
}); });
...@@ -91,7 +97,7 @@ public class WaitCouponFragment extends BaseFragment<CouponAllPresenter> impleme ...@@ -91,7 +97,7 @@ public class WaitCouponFragment extends BaseFragment<CouponAllPresenter> impleme
headMap.put("Authorization", OkGoUtil.getToken()); headMap.put("Authorization", OkGoUtil.getToken());
Map<String, Object> map = new LinkedHashMap<>(); Map<String, Object> map = new LinkedHashMap<>();
map.put("type", "0"); map.put("type", "0");
mPresenter.getData(RvFrameConfig.HOST,0, CouponApi.HTTP_URL_COUPON_LIST, CouponBean.class, map,headMap,false); mPresenter.getData(RvFrameConfig.HOST, 0, CouponApi.HTTP_URL_COUPON_LIST, CouponBean.class, map, headMap, false);
} }
@Override @Override
...@@ -101,11 +107,11 @@ public class WaitCouponFragment extends BaseFragment<CouponAllPresenter> impleme ...@@ -101,11 +107,11 @@ public class WaitCouponFragment extends BaseFragment<CouponAllPresenter> impleme
} }
private void processData(CouponBean bean) { private void processData(CouponBean bean) {
if (bean !=null && bean.getData()!=null && bean.getData().size() >0) { if (bean != null && bean.getData() != null && bean.getData().size() > 0) {
mAdapter.getData().clear(); mAdapter.getData().clear();
mAdapter.addData(bean.getData()); mAdapter.addData(bean.getData());
mAdapter.notifyDataSetChanged(); mAdapter.notifyDataSetChanged();
}else { } else {
mAdapter.setEmptyView(getEmptyView(rvContent, -1, "暂无优惠券")); mAdapter.setEmptyView(getEmptyView(rvContent, -1, "暂无优惠券"));
mAdapter.notifyDataSetChanged(); mAdapter.notifyDataSetChanged();
} }
......
...@@ -34,7 +34,8 @@ ...@@ -34,7 +34,8 @@
<service android:name="com.rv.im.call.RecordService" /> <service android:name="com.rv.im.call.RecordService" />
<activity android:name="com.rv.im.CustomerListActivity"></activity> <activity android:name="com.rv.im.CustomerListActivity"
android:launchMode="singleTask"></activity>
</application> </application>
</manifest> </manifest>
\ No newline at end of file
...@@ -33,12 +33,16 @@ import com.ruiwenliu.wrapper.base.BaseStatusActivity; ...@@ -33,12 +33,16 @@ import com.ruiwenliu.wrapper.base.BaseStatusActivity;
import com.ruiwenliu.wrapper.base.presenter.CommonPresenter; import com.ruiwenliu.wrapper.base.presenter.CommonPresenter;
import com.ruiwenliu.wrapper.util.permission.RxPermission; import com.ruiwenliu.wrapper.util.permission.RxPermission;
import com.ruiwenliu.wrapper.weight.TitleView; import com.ruiwenliu.wrapper.weight.TitleView;
import com.rv.component.utils.CacheEnum;
import com.rv.component.utils.RvCache;
import com.rv.im.adapter.ChatContentAdapter; import com.rv.im.adapter.ChatContentAdapter;
import com.rv.im.audio.IMRecordController; import com.rv.im.audio.IMRecordController;
import com.rv.im.audio.RecordListener; import com.rv.im.audio.RecordListener;
import com.rv.im.audio_x.VoicePlayer; import com.rv.im.audio_x.VoicePlayer;
import com.rv.im.bean.User;
import com.rv.im.db.service.ChatMessageServiceImp; import com.rv.im.db.service.ChatMessageServiceImp;
import com.rv.im.db.table.ChatMessage; import com.rv.im.db.table.ChatMessage;
import com.rv.im.db.table.Customer;
import com.rv.im.enums.MessageStatusEnum; import com.rv.im.enums.MessageStatusEnum;
import com.rv.im.enums.MessageTypeEnum; import com.rv.im.enums.MessageTypeEnum;
import com.rv.im.mucfile.RvDownManager; import com.rv.im.mucfile.RvDownManager;
...@@ -49,6 +53,7 @@ import com.rv.im.mvp.view.IChatView; ...@@ -49,6 +53,7 @@ import com.rv.im.mvp.view.IChatView;
import com.rv.im.photopicker.PhotoPickerActivity; import com.rv.im.photopicker.PhotoPickerActivity;
import com.rv.im.util.FileUtils; import com.rv.im.util.FileUtils;
import com.rv.im.util.InputManager; import com.rv.im.util.InputManager;
import com.rv.im.util.RvImTimerTask;
import com.rv.im.video.ChatVideoPreviewActivity; import com.rv.im.video.ChatVideoPreviewActivity;
import com.rv.im.view.ChatFaceView; import com.rv.im.view.ChatFaceView;
import com.rv.im.xmpp.ListenerManager; import com.rv.im.xmpp.ListenerManager;
...@@ -56,7 +61,10 @@ import com.rv.im.xmpp.listener.ChatMessageListener; ...@@ -56,7 +61,10 @@ import com.rv.im.xmpp.listener.ChatMessageListener;
import java.io.File; import java.io.File;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.Timer;
import pub.devrel.easypermissions.AppSettingsDialog; import pub.devrel.easypermissions.AppSettingsDialog;
...@@ -82,6 +90,10 @@ public class ChatActivity extends BaseStatusActivity<CommonPresenter> implements ...@@ -82,6 +90,10 @@ public class ChatActivity extends BaseStatusActivity<CommonPresenter> implements
private String targetUserId; private String targetUserId;
private String targetName; private String targetName;
private int customerStatus;
private Timer timer;
private RvImTimerTask timerTask;
private int startPosition; private int startPosition;
private int endPosition; private int endPosition;
...@@ -215,10 +227,11 @@ public class ChatActivity extends BaseStatusActivity<CommonPresenter> implements ...@@ -215,10 +227,11 @@ public class ChatActivity extends BaseStatusActivity<CommonPresenter> implements
} }
}; };
public static Intent getIntent(Context context, String targetUserId, String targetName) { public static Intent getIntent(Context context, String targetUserId, String targetName, int customerStatus) {
Intent intent = new Intent(context, ChatActivity.class); Intent intent = new Intent(context, ChatActivity.class);
intent.putExtra("targetUserId", targetUserId); intent.putExtra("targetUserId", targetUserId);
intent.putExtra("targetName", targetName); intent.putExtra("targetName", targetName);
intent.putExtra("customerStatus", customerStatus);
return intent; return intent;
} }
...@@ -232,7 +245,9 @@ public class ChatActivity extends BaseStatusActivity<CommonPresenter> implements ...@@ -232,7 +245,9 @@ public class ChatActivity extends BaseStatusActivity<CommonPresenter> implements
ListenerManager.getInstance().addChatMessageListener(this); ListenerManager.getInstance().addChatMessageListener(this);
targetUserId = getIntent().getStringExtra("targetUserId"); targetUserId = getIntent().getStringExtra("targetUserId");
targetName = getIntent().getStringExtra("targetName"); targetName = getIntent().getStringExtra("targetName");
if (!TextUtils.isEmpty(targetName)) titleView.setTitle(targetName); customerStatus = getIntent().getIntExtra("customerStatus", 0);
if (!TextUtils.isEmpty(targetName))
titleView.setTitle(targetName + (customerStatus == 0 ? "(离线)" : "(在线)"));
mInputManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); mInputManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
mLoginUserId = ImSetting.getUserId(); mLoginUserId = ImSetting.getUserId();
presenter = new ChatPresenterImp(this, this); presenter = new ChatPresenterImp(this, this);
...@@ -241,6 +256,10 @@ public class ChatActivity extends BaseStatusActivity<CommonPresenter> implements ...@@ -241,6 +256,10 @@ public class ChatActivity extends BaseStatusActivity<CommonPresenter> implements
ChatMessageServiceImp.getInstance(getApplicationContext()).setMsgRead(targetUserId); ChatMessageServiceImp.getInstance(getApplicationContext()).setMsgRead(targetUserId);
initWidget(); initWidget();
initListener(); initListener();
timer = new Timer();
timerTask = new RvImTimerTask(timerListener);
timer.schedule(timerTask, 100, 10000);
} }
@Override @Override
...@@ -258,6 +277,13 @@ public class ChatActivity extends BaseStatusActivity<CommonPresenter> implements ...@@ -258,6 +277,13 @@ public class ChatActivity extends BaseStatusActivity<CommonPresenter> implements
@Override @Override
public void onShowResult(int requestType, BaseBean result) { public void onShowResult(int requestType, BaseBean result) {
if (requestType == 1) {
User user = (User) result;
if (user != null && user.getData() != null) {
if (!TextUtils.isEmpty(targetName))
titleView.setTitle(targetName + (user.getData().getOnlinestate() == 0 ? "(离线)" : "(在线)"));
}
}
} }
private void initWidget() { private void initWidget() {
...@@ -517,6 +543,10 @@ public class ChatActivity extends BaseStatusActivity<CommonPresenter> implements ...@@ -517,6 +543,10 @@ public class ChatActivity extends BaseStatusActivity<CommonPresenter> implements
public void onDestroy() { public void onDestroy() {
super.onDestroy(); super.onDestroy();
ListenerManager.getInstance().removeChatMessageListener(this); ListenerManager.getInstance().removeChatMessageListener(this);
if (timer != null)
timer.cancel();
if (timerTask != null)
timerTask.cancel();
} }
private void getData() { private void getData() {
...@@ -711,4 +741,17 @@ public class ChatActivity extends BaseStatusActivity<CommonPresenter> implements ...@@ -711,4 +741,17 @@ public class ChatActivity extends BaseStatusActivity<CommonPresenter> implements
} }
presenter.sendVoice(filePath, timeLen); presenter.sendVoice(filePath, timeLen);
} }
private RvImTimerTask.TimerListener timerListener = () -> runOnUiThread(() -> {
AppConfig appConfig = (AppConfig) RvCache.getInstance().get(CacheEnum.IM_CONFIG);
if (appConfig != null && !TextUtils.isEmpty(appConfig.USER_GET_URL))
initFriendState(appConfig.USER_GET_URL);
});
private void initFriendState(String url) {
Map<String, String> params = new HashMap<>();
params.put("access_token", ImSetting.getImToken());
params.put("userId", targetUserId);
mPresenter.getData(1, url, User.class, params, false);
}
} }
...@@ -80,7 +80,7 @@ public class ConversationListActivity extends BaseStatusActivity<CommonPresenter ...@@ -80,7 +80,7 @@ public class ConversationListActivity extends BaseStatusActivity<CommonPresenter
adapter = new ChatConversationAdapter(conversations); adapter = new ChatConversationAdapter(conversations);
adapter.setOnItemClickListener((adapter, view, position) -> { adapter.setOnItemClickListener((adapter, view, position) -> {
ChatConversation conversation = conversations.get(position); ChatConversation conversation = conversations.get(position);
startActivityForResult(ChatActivity.getIntent(getApplicationContext(), conversation.getUserId(), conversation.getUserName()), 1); startActivityForResult(ChatActivity.getIntent(getApplicationContext(), conversation.getUserId(), conversation.getUserName(),0), 1);
}); });
recyclerView.setAdapter(adapter); recyclerView.setAdapter(adapter);
......
package com.rv.im; package com.rv.im;
import android.app.AlertDialog;
import android.content.Intent; import android.content.Intent;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.provider.Settings;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView; import android.support.v7.widget.RecyclerView;
import android.text.TextUtils;
import android.widget.LinearLayout; import android.widget.LinearLayout;
import android.widget.Toast; import android.widget.Toast;
...@@ -14,20 +19,29 @@ import com.ruiwenliu.wrapper.base.presenter.CommonPresenter; ...@@ -14,20 +19,29 @@ import com.ruiwenliu.wrapper.base.presenter.CommonPresenter;
import com.ruiwenliu.wrapper.weight.TitleView; import com.ruiwenliu.wrapper.weight.TitleView;
import com.ruiwenliu.wrapper.weight.refresh.SimpleRefreshLayout; import com.ruiwenliu.wrapper.weight.refresh.SimpleRefreshLayout;
import com.ruiwenliu.wrapper.weight.refresh.SimpleRefreshView; import com.ruiwenliu.wrapper.weight.refresh.SimpleRefreshView;
import com.rv.component.utils.CacheEnum;
import com.rv.component.utils.RvCache;
import com.rv.im.adapter.CustomerListAdapter; import com.rv.im.adapter.CustomerListAdapter;
import com.rv.im.bean.CustomersBean; import com.rv.im.bean.CustomersBean;
import com.rv.im.bean.User;
import com.rv.im.db.service.ChatMessageServiceImp; import com.rv.im.db.service.ChatMessageServiceImp;
import com.rv.im.db.service.CustomerServiceImp; import com.rv.im.db.service.CustomerServiceImp;
import com.rv.im.db.service.ICustomerService; import com.rv.im.db.service.ICustomerService;
import com.rv.im.db.table.ChatMessage; import com.rv.im.db.table.ChatMessage;
import com.rv.im.db.table.Customer; import com.rv.im.db.table.Customer;
import com.rv.im.util.RvImTimerTask;
import com.rv.im.util.ServiceUtils; import com.rv.im.util.ServiceUtils;
import com.rv.im.xmpp.ListenerManager; import com.rv.im.xmpp.ListenerManager;
import com.rv.im.xmpp.listener.ChatMessageListener; import com.rv.im.xmpp.listener.ChatMessageListener;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.Timer;
import okhttp3.Call;
public class CustomerListActivity extends BaseStatusActivity<CommonPresenter> implements SimpleRefreshLayout.OnSimpleRefreshListener, ChatMessageListener { public class CustomerListActivity extends BaseStatusActivity<CommonPresenter> implements SimpleRefreshLayout.OnSimpleRefreshListener, ChatMessageListener {
...@@ -35,6 +49,10 @@ public class CustomerListActivity extends BaseStatusActivity<CommonPresenter> im ...@@ -35,6 +49,10 @@ public class CustomerListActivity extends BaseStatusActivity<CommonPresenter> im
private RecyclerView recyclerView; private RecyclerView recyclerView;
private List<Customer> customers = new ArrayList<>(); private List<Customer> customers = new ArrayList<>();
private CustomerListAdapter adapter = null; private CustomerListAdapter adapter = null;
private Timer timer;
private RvImTimerTask timerTask;
private Map<String, Integer> customerStatus = new HashMap<>();
private int testTime = 0; private int testTime = 0;
...@@ -43,12 +61,11 @@ public class CustomerListActivity extends BaseStatusActivity<CommonPresenter> im ...@@ -43,12 +61,11 @@ public class CustomerListActivity extends BaseStatusActivity<CommonPresenter> im
return R.layout.activity_customer_list; return R.layout.activity_customer_list;
} }
@Override @Override
protected void initView(Bundle savedInstanceState, TitleView titleView, Intent intent) { protected void initView(Bundle savedInstanceState, TitleView titleView, Intent intent) {
ListenerManager.getInstance().addChatMessageListener(this); ListenerManager.getInstance().addChatMessageListener(this);
titleView.setTitle("客服列表"); titleView.setTitle("客服列表");
timer = new Timer();
titleView.setImageResource(R.id.iv_title_right, R.drawable.ic_app_add); titleView.setImageResource(R.id.iv_title_right, R.drawable.ic_app_add);
titleView.setChildClickListener(R.id.iv_title_right, v -> { titleView.setChildClickListener(R.id.iv_title_right, v -> {
if (!BuildConfig.DEBUG) return; if (!BuildConfig.DEBUG) return;
...@@ -66,14 +83,16 @@ public class CustomerListActivity extends BaseStatusActivity<CommonPresenter> im ...@@ -66,14 +83,16 @@ public class CustomerListActivity extends BaseStatusActivity<CommonPresenter> im
refreshLayout = findViewById(R.id.refresh); refreshLayout = findViewById(R.id.refresh);
recyclerView = findViewById(R.id.recyclerView); recyclerView = findViewById(R.id.recyclerView);
recyclerView.setLayoutManager(new LinearLayoutManager(this, LinearLayout.VERTICAL, false)); recyclerView.setLayoutManager(new LinearLayoutManager(this, LinearLayout.VERTICAL, false));
adapter = new CustomerListAdapter(getApplicationContext(), customers); adapter = new CustomerListAdapter(getApplicationContext(), customers, customerStatus);
adapter.setOnItemClickListener((adapter, view, position) -> { adapter.setOnItemClickListener((adapter, view, position) -> {
Customer customer = customers.get(position); Customer customer = customers.get(position);
startActivityForResult(ChatActivity.getIntent(getApplicationContext(), customer.getImUserId(), customer.getName()), 1); startActivityForResult(ChatActivity.getIntent(getApplicationContext(), customer.getImUserId(), customer.getName(),
customerStatus.get(customer.getImUserId()) == null ? 0 : customerStatus.get(customer.getImUserId()).intValue()), 1);
}); });
refreshLayout.setHeaderView(new SimpleRefreshView(this)); refreshLayout.setHeaderView(new SimpleRefreshView(this));
refreshLayout.setOnSimpleRefreshListener(this); refreshLayout.setOnSimpleRefreshListener(this);
recyclerView.setAdapter(adapter); recyclerView.setAdapter(adapter);
checkOverlayPermission();
} }
@Override @Override
...@@ -82,6 +101,26 @@ public class CustomerListActivity extends BaseStatusActivity<CommonPresenter> im ...@@ -82,6 +101,26 @@ public class CustomerListActivity extends BaseStatusActivity<CommonPresenter> im
getCustomerList(); getCustomerList();
} }
/********
* 检查滴房车是否能在其他应用上层显示
*/
private void checkOverlayPermission() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (!Settings.canDrawOverlays(this)) {
new AlertDialog.Builder(this).setTitle("提示")
.setMessage("允许在手机上层显示,实时获知新消息")
.setNegativeButton("下次再说", (dialogInterface, i) -> {
dialogInterface.dismiss();
}).setPositiveButton("好的", (dialogInterface, i) -> {
Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);
intent.setData(Uri.parse("package:" + getPackageName()));
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}).setCancelable(false).show();
}
}
}
/****** /******
* 获取客服列表 * 获取客服列表
*/ */
...@@ -103,6 +142,10 @@ public class CustomerListActivity extends BaseStatusActivity<CommonPresenter> im ...@@ -103,6 +142,10 @@ public class CustomerListActivity extends BaseStatusActivity<CommonPresenter> im
customers.clear(); customers.clear();
customers.addAll(lists); customers.addAll(lists);
adapter.notifyDataSetChanged(); adapter.notifyDataSetChanged();
if (timerTask == null) {
timerTask = new RvImTimerTask(timerListener);
timer.schedule(timerTask, 100, 10000);
}
} else { } else {
mPresenter.getData(0, ImUrlConfig.HTTP_CUSTOMER_LIST_URL, CustomersBean.class, true); mPresenter.getData(0, ImUrlConfig.HTTP_CUSTOMER_LIST_URL, CustomersBean.class, true);
} }
...@@ -122,8 +165,30 @@ public class CustomerListActivity extends BaseStatusActivity<CommonPresenter> im ...@@ -122,8 +165,30 @@ public class CustomerListActivity extends BaseStatusActivity<CommonPresenter> im
customers.clear(); customers.clear();
customers.addAll(bean.getData()); customers.addAll(bean.getData());
adapter.notifyDataSetChanged(); adapter.notifyDataSetChanged();
if (timerTask == null) {
timerTask = new RvImTimerTask(timerListener);
timer.schedule(timerTask, 100, 10000);
}
getCustomService().addCustomers(customers); getCustomService().addCustomers(customers);
} }
} else if (requestType == 1) {
User user = (User) result;
if (user != null && user.getData() != null && customers != null) {
int position = 0;
if (!TextUtils.isEmpty(user.getData().getUserId())) {
customerStatus.remove(user.getData().getUserId());
customerStatus.put(user.getData().getUserId(), user.getData().getOnlinestate());
}
for (int i = 0; i < customers.size(); i++) {
Customer customer = customers.get(i);
if (!TextUtils.isEmpty(user.getData().getUserId()) && user.getData().getUserId().equals(customer.getImUserId())) {
position = i;
break;
}
}
adapter.notifyItemChanged(position);
}
} }
} }
...@@ -149,7 +214,25 @@ public class CustomerListActivity extends BaseStatusActivity<CommonPresenter> im ...@@ -149,7 +214,25 @@ public class CustomerListActivity extends BaseStatusActivity<CommonPresenter> im
@Override @Override
public void onNewMessage(String fromUserId, ChatMessage message, boolean isGroupMsg) { public void onNewMessage(String fromUserId, ChatMessage message, boolean isGroupMsg) {
getCustomerList(); if (customers != null && customers.size() > 0) {
for (Customer customer : customers) {
if (!TextUtils.isEmpty(customer.getImUserId()) &&
customer.getImUserId().equals(fromUserId)) {
if (message != null)
customer.setLastMessageInfo(message);
break;
}
}
}
Collections.sort(customers, (o1, o2) -> {
if (o1.getLastMsgTimes() > o2.getLastMsgTimes()) {
return -1;
} else if (o1.getLastMsgTimes() == o2.getLastMsgTimes()) {
return 0;
}
return 1;
});
adapter.notifyDataSetChanged();
} }
@Override @Override
...@@ -164,5 +247,27 @@ public class CustomerListActivity extends BaseStatusActivity<CommonPresenter> im ...@@ -164,5 +247,27 @@ public class CustomerListActivity extends BaseStatusActivity<CommonPresenter> im
public void onDestroy() { public void onDestroy() {
super.onDestroy(); super.onDestroy();
ListenerManager.getInstance().removeChatMessageListener(this); ListenerManager.getInstance().removeChatMessageListener(this);
if (timer != null)
timer.cancel();
if (timerTask != null)
timerTask.cancel();
}
private RvImTimerTask.TimerListener timerListener = () -> runOnUiThread(() -> {
AppConfig appConfig = (AppConfig) RvCache.getInstance().get(CacheEnum.IM_CONFIG);
if (appConfig != null && !TextUtils.isEmpty(appConfig.USER_GET_URL))
if (customers != null && customers.size() > 0)
for (Customer customer : customers) {
if (customer != null)
initFriendState(appConfig.USER_GET_URL, customer);
} }
});
private void initFriendState(String url, Customer customer) {
Map<String, String> params = new HashMap<>();
params.put("access_token", ImSetting.getImToken());
params.put("userId", customer.getImUserId());
mPresenter.getData(1, url, User.class, params, false);
}
} }
package com.rv.im.adapter; package com.rv.im.adapter;
import android.content.Context; import android.content.Context;
import android.graphics.Color;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import android.text.TextUtils; import android.text.TextUtils;
...@@ -11,24 +12,39 @@ import com.rv.im.db.table.Customer; ...@@ -11,24 +12,39 @@ import com.rv.im.db.table.Customer;
import com.rv.im.util.SmileyParser; import com.rv.im.util.SmileyParser;
import java.util.List; import java.util.List;
import java.util.Map;
public class CustomerListAdapter extends BaseQuickAdapter<Customer, BaseViewHolder> { public class CustomerListAdapter extends BaseQuickAdapter<Customer, BaseViewHolder> {
private SmileyParser parser; private SmileyParser parser;
public CustomerListAdapter(Context context, @Nullable List<Customer> data) { private Map<String, Integer> customerStatus;
public CustomerListAdapter(Context context, @Nullable List<Customer> data, Map<String, Integer> map) {
super(R.layout.item_customer, data); super(R.layout.item_customer, data);
this.parser = SmileyParser.getInstance(context); this.parser = SmileyParser.getInstance(context);
this.customerStatus = map;
} }
@Override @Override
protected void convert(BaseViewHolder helper, Customer item) { protected void convert(BaseViewHolder helper, Customer item) {
if (!TextUtils.isEmpty(item.getName())) if (!TextUtils.isEmpty(item.getName()))
helper.setText(R.id.tv_name, item.getName()); helper.setText(R.id.tv_name, item.getName());
if (customerStatus.get(item.getImUserId()) != null && customerStatus.get(item.getImUserId()) == 1) {
helper.setText(R.id.tv_state, "在线"); helper.setText(R.id.tv_state, "在线");
helper.setTextColor(R.id.tv_state, Color.parseColor("#FFB74B"));
} else {
helper.setText(R.id.tv_state, "离线");
helper.setTextColor(R.id.tv_state, Color.parseColor("#CCCCCC"));
}
if (!TextUtils.isEmpty(item.getLastMsg())) if (!TextUtils.isEmpty(item.getLastMsg()))
// helper.setText(R.id.tv_last_msg, item.getLastMsg()); // helper.setText(R.id.tv_last_msg, item.getLastMsg());
helper.setText(R.id.tv_last_msg, parser.addSmileySpans(deleteHtml(item.getLastMsg()), true)); helper.setText(R.id.tv_last_msg, parser.addSmileySpans(deleteHtml(item.getLastMsg()), true));
else {
helper.setText(R.id.tv_last_msg, " ");
}
} }
private static String deleteHtml(String msg) { private static String deleteHtml(String msg) {
......
...@@ -11,7 +11,8 @@ public enum MessageTypeEnum { ...@@ -11,7 +11,8 @@ public enum MessageTypeEnum {
VOLTE_CALL(5, "语音通话"), VOLTE_CALL(5, "语音通话"),
VIDEO_CALL(6, "视频通话"), VIDEO_CALL(6, "视频通话"),
CANCEL(7,"撤销") ; CANCEL(7, "撤销"),
PING(8, "ping");
private int type; private int type;
private String name; private String name;
......
package com.rv.im.util;
import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.os.Build;
import android.support.v4.app.NotificationCompat;
import com.rv.im.CustomerListActivity;
import com.rv.im.R;
public class NotificationMananger {
private NotificationMananger() {
}
public static void showNewsNotification(Context context, String fromId) {
NotificationManager manager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
NotificationCompat.Builder builder;
//判断是否是8.0Android.O
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
NotificationChannel chan1 = new NotificationChannel("1", "newChannel", NotificationManager.IMPORTANCE_HIGH);
manager.createNotificationChannel(chan1);
builder = new NotificationCompat.Builder(context, "1");
} else {
builder = new NotificationCompat.Builder(context);
}
//
// Intent intent = new Intent();
// intent.setComponent(new ComponentName(context, "com.xxfc.rv."));
// intent.putExtra("to","chat") ;
// intent.putExtra("fromId",fromId) ;
//
Intent intent = new Intent(context, CustomerListActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);
Notification notification = builder.setTicker("您有新的消息")
.setSmallIcon(R.mipmap.logo)
.setWhen(System.currentTimeMillis())
.setContentIntent(pendingIntent)
.setContentTitle("滴房车")
.setContentText("您有新的消息")
.setAutoCancel(true)
.setPriority(Notification.PRIORITY_DEFAULT)
.build();
manager.notify(0, notification);
}
}
package com.rv.im.view;
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.animation.ObjectAnimator;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.os.Build;
import android.os.Looper;
import android.os.Message;
import android.util.Log;
import android.view.Gravity;
import android.view.MotionEvent;
import android.view.View;
import android.view.WindowManager;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import com.rv.im.CustomerListActivity;
import com.rv.im.R;
public class TitleTextWindow implements View.OnTouchListener {
private Context mContext;
private WindowManager wm;
private LinearLayout linearLayout;
private int downY;
public TitleTextWindow(Context context) {
mContext = context;
}
private android.os.Handler mHander = new android.os.Handler(Looper.myLooper()) {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
animDismiss();
}
};
/**
* 动画,从顶部弹出
*/
private void animShow() {
//使用动画从顶部弹出
ObjectAnimator animator = ObjectAnimator.ofFloat(linearLayout, "translationY", -linearLayout.getMeasuredHeight(), 0);
animator.setDuration(600);
animator.start();
}
/**
* 动画,从顶部收回
*/
private void animDismiss() {
if (linearLayout == null || linearLayout.getParent() == null) {
return;
}
ObjectAnimator animator = ObjectAnimator.ofFloat(linearLayout, "translationY", linearLayout.getTranslationY(), -linearLayout.getMeasuredHeight());
animator.setDuration(600);
animator.start();
animator.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationCancel(Animator animation) {
super.onAnimationCancel(animation);
}
@Override
public void onAnimationEnd(Animator animation) {
super.onAnimationEnd(animation);
//移除HeaderToast (一定要在动画结束的时候移除,不然下次进来的时候由于wm里边已经有控件了,所以会导致卡死)
if (null != linearLayout && null != linearLayout.getParent()) {
wm.removeView(linearLayout);
}
}
@Override
public void onAnimationRepeat(Animator animation) {
super.onAnimationRepeat(animation);
}
@Override
public void onAnimationStart(Animator animation) {
super.onAnimationStart(animation);
}
@Override
public void onAnimationPause(Animator animation) {
super.onAnimationPause(animation);
}
@Override
public void onAnimationResume(Animator animation) {
super.onAnimationResume(animation);
}
});
}
/**
* 向外部暴露显示的方法
*/
public void show() {
createTitleView();
animShow();
//3S后自动关闭
mHander.sendEmptyMessageDelayed(20, 2000);
}
/**
* 向外部暴露关闭的方法
*/
public void dismiss() {
animDismiss();
}
/**
* 视图创建方法
*/
private void createTitleView() {
//准备Window要添加的View
linearLayout = new LinearLayout(mContext);
final LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
linearLayout.setLayoutParams(layoutParams);
View titleView = View.inflate(mContext, R.layout.header_toast, null);//这里是你弹窗的UI
RelativeLayout header = titleView.findViewById(R.id.header_toast);
header.setOnClickListener(v -> {
// Intent intent = new Intent();
// intent.setComponent(new ComponentName(mContext, mContext.getClass()));
// intent.putExtra("to", "chat");
// mContext.startActivity(intent);
Intent intent = new Intent(mContext, CustomerListActivity.class);
mContext.startActivity(intent);
animDismiss();
});
// 为titleView设置Touch事件
linearLayout.setOnTouchListener(this);
linearLayout.addView(titleView);
// 定义WindowManager 并且将View添加到WindowManagar中去
wm = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE);
WindowManager.LayoutParams wm_params = new WindowManager.LayoutParams();
wm_params.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
| WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
| WindowManager.LayoutParams.FLAG_FULLSCREEN
| WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN;
//这里需要注意,因为不同系统版本策略不一,所以需要根据版本判断设置type,否则会引起崩溃。
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.N_MR1) {//大于android SDK 7.1.1
wm_params.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
} else {
wm_params.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT;
}
wm_params.gravity = Gravity.TOP;
wm_params.x = 0;
wm_params.y = 0;
wm_params.format = -3; // 会影响Toast中的布局消失的时候父控件和子控件消失的时机不一致,比如设置为-1之后就会不同步
wm_params.alpha = 0.8f;
linearLayout.measure(0, 0);
wm_params.height = linearLayout.getMeasuredHeight();
wm.addView(linearLayout, wm_params);
}
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
downY = (int) event.getRawY();
break;
case MotionEvent.ACTION_MOVE:
int moveY = (int) event.getRawY();
if (moveY - downY < 0) {//如果是向上滑动
linearLayout.setTranslationY(moveY - downY);
}
break;
case MotionEvent.ACTION_UP:
//达到一定比例后,松开手指将关闭弹窗
if (Math.abs(linearLayout.getTranslationY()) > linearLayout.getMeasuredHeight() / 1.5) {
Log.e("TAG", "回弹");
animDismiss();
} else {
linearLayout.setTranslationY(0);
}
break;
default:
break;
}
return true;
}
}
\ No newline at end of file
package com.rv.im.xmpp; package com.rv.im.xmpp;
import android.media.MediaPlayer;
import android.os.Handler; import android.os.Handler;
import android.os.Looper; import android.os.Looper;
import com.rv.im.ImSetting; import com.rv.im.ImSetting;
import com.rv.im.R;
import com.rv.im.db.service.ChatMessageServiceImp; import com.rv.im.db.service.ChatMessageServiceImp;
import com.rv.im.db.service.IChatMessageService; import com.rv.im.db.service.IChatMessageService;
import com.rv.im.db.table.ChatMessage; import com.rv.im.db.table.ChatMessage;
import com.rv.im.util.NotificationMananger;
import com.rv.im.xmpp.listener.AuthStateListener; import com.rv.im.xmpp.listener.AuthStateListener;
import com.rv.im.xmpp.listener.ChatMessageListener; import com.rv.im.xmpp.listener.ChatMessageListener;
...@@ -18,6 +21,7 @@ public class ListenerManager { ...@@ -18,6 +21,7 @@ public class ListenerManager {
/* 回调监听 */ /* 回调监听 */
private List<AuthStateListener> mAuthStateListeners = new ArrayList<>(); private List<AuthStateListener> mAuthStateListeners = new ArrayList<>();
private List<ChatMessageListener> mChatMessageListeners = new ArrayList<>(); private List<ChatMessageListener> mChatMessageListeners = new ArrayList<>();
private Handler mHandler = new Handler(Looper.getMainLooper()); private Handler mHandler = new Handler(Looper.getMainLooper());
private ListenerManager() { private ListenerManager() {
...@@ -97,7 +101,8 @@ public class ListenerManager { ...@@ -97,7 +101,8 @@ public class ListenerManager {
* 新消息来临 * 新消息来临
*/ */
public void notifyNewMesssage(final ChatMessage message) { public void notifyNewMesssage(final ChatMessage message) {
NotificationMananger.showNewsNotification(ImSetting.getContext(), message.getFromId());
bell();
mHandler.post(() -> { mHandler.post(() -> {
if (message != null) { if (message != null) {
ChatMessageServiceImp.getInstance(ImSetting.getContext()).addMessage(message); // 数据库添加消息 ChatMessageServiceImp.getInstance(ImSetting.getContext()).addMessage(message); // 数据库添加消息
...@@ -107,4 +112,24 @@ public class ListenerManager { ...@@ -107,4 +112,24 @@ public class ListenerManager {
} }
}); });
} }
private void bell() {
MediaPlayer mediaPlayer = MediaPlayer.create(ImSetting.getContext(), R.raw.msg);
mediaPlayer.start();
mediaPlayer.setOnCompletionListener(arg0 -> {
mediaPlayer.start();
stopPlay(mediaPlayer);
});
}
private void stopPlay(MediaPlayer mediaPlayer) {
if (mediaPlayer != null) {
try {
mediaPlayer.stop();
} catch (Exception e) {
e.printStackTrace();
}
mediaPlayer.release();
}
}
} }
<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<!-- 填充的颜色 -->
<solid android:color="#FFFFFF" />
<corners android:radius="5dp" />
<stroke
android:width="0.5dp"
android:color="#ebebeb" />
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/rl_rootview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="2dp">
<RelativeLayout
android:id="@+id/header_toast"
android:background="@drawable/shap_header_toast_background"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="5dp"
android:paddingLeft="20dp"
android:paddingRight="20sp"
android:paddingTop="5dp"
android:layout_marginTop="@dimen/dp20">
<RelativeLayout
android:id="@+id/header_toast_re"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ImageView
android:src="@mipmap/logo"
android:id="@+id/header_toast_smallimg"
android:layout_width="20dp"
android:layout_height="20dp" />
<TextView
android:id="@+id/header_toast_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginLeft="5dp"
android:layout_toRightOf="@+id/header_toast_smallimg"
android:text="滴房车"
android:textColor="#797979"
android:textSize="10sp" />
<TextView
android:id="@+id/header_toast_time"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginLeft="5dp"
android:layout_toRightOf="@+id/header_toast_title"
android:text=""
android:textColor="#999"
android:textSize="10sp" />
</RelativeLayout>
<TextView
android:id="@+id/header_toast_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/header_toast_re"
android:layout_marginTop="5dp"
android:gravity="left"
android:text="您有新的消息"
android:textColor="#333"
android:textSize="15sp" />
<!--<ImageView-->
<!--android:id="@+id/header_toast_bigimg"-->
<!--android:layout_width="50dp"-->
<!--android:layout_height="50dp"-->
<!--android:layout_alignParentRight="true"-->
<!--android:layout_centerVertical="true"-->
<!--android:layout_marginLeft="12dp" />-->
<!--<TextView-->
<!--android:id="@+id/header_toast_content"-->
<!--android:layout_width="wrap_content"-->
<!--android:layout_height="wrap_content"-->
<!--android:text="1223333"-->
<!--android:layout_below="@+id/header_toast_name"-->
<!--android:layout_marginTop="5dp"-->
<!--android:textColor="#666"-->
<!--android:textSize="13sp" />-->
</RelativeLayout>
</LinearLayout>
\ No newline at end of file
...@@ -260,7 +260,7 @@ public class MemberCenterActivity extends BaseStatusActivity<MemberPresenter> { ...@@ -260,7 +260,7 @@ public class MemberCenterActivity extends BaseStatusActivity<MemberPresenter> {
private int payType = 1; private int payType = 1;
private PayListener payListener = new PayListener() { private PayListener payListener = new PayListener() {
@Override @Override
public void pay(final MemberListBean.MemberCard card) { public void pay(final MemberListBean.MemberCard card, final String phone) {
if (!isLogin()) return; if (!isLogin()) return;
new PaymentTypeSelection(MemberCenterActivity.this) { new PaymentTypeSelection(MemberCenterActivity.this) {
@Override @Override
...@@ -284,7 +284,7 @@ public class MemberCenterActivity extends BaseStatusActivity<MemberPresenter> { ...@@ -284,7 +284,7 @@ public class MemberCenterActivity extends BaseStatusActivity<MemberPresenter> {
} else if (i == R.id.tv_pay_immediately) { } else if (i == R.id.tv_pay_immediately) {
dismiss(); dismiss();
mPresenter.createOrder(card, 2); mPresenter.createOrder(card, phone, 2);
} }
} }
}, R.id.iv_close, R.id.ll_item_wechat, R.id.ll_item_alipay, R.id.tv_pay_immediately); }, R.id.iv_close, R.id.ll_item_wechat, R.id.ll_item_alipay, R.id.tv_pay_immediately);
...@@ -309,7 +309,7 @@ public class MemberCenterActivity extends BaseStatusActivity<MemberPresenter> { ...@@ -309,7 +309,7 @@ public class MemberCenterActivity extends BaseStatusActivity<MemberPresenter> {
public interface PayListener { public interface PayListener {
void pay(MemberListBean.MemberCard card); void pay(MemberListBean.MemberCard card, String phone);
void checkAgreement(boolean hasAgree); void checkAgreement(boolean hasAgree);
} }
......
...@@ -8,6 +8,7 @@ public class MemberOrderPostBodyBean { ...@@ -8,6 +8,7 @@ public class MemberOrderPostBodyBean {
private String couponIds; private String couponIds;
private int memberLevel; private int memberLevel;
private int memberLevelId; private int memberLevelId;
private String facilitatePhone;
public String getCouponIds() { public String getCouponIds() {
return couponIds; return couponIds;
...@@ -33,10 +34,19 @@ public class MemberOrderPostBodyBean { ...@@ -33,10 +34,19 @@ public class MemberOrderPostBodyBean {
this.memberLevelId = memberLevelId; this.memberLevelId = memberLevelId;
} }
public MemberOrderPostBodyBean(String couponIds, int memberLevel, int memberLevelId) { public String getFacilitatePhone() {
return facilitatePhone;
}
public void setFacilitatePhone(String facilitatePhone) {
this.facilitatePhone = facilitatePhone;
}
public MemberOrderPostBodyBean(String couponIds, int memberLevel, int memberLevelId, String inviterPhone) {
this.couponIds = couponIds; this.couponIds = couponIds;
this.memberLevel = memberLevel; this.memberLevel = memberLevel;
this.memberLevelId = memberLevelId; this.memberLevelId = memberLevelId;
this.facilitatePhone = inviterPhone;
} }
public MemberOrderPostBodyBean() { public MemberOrderPostBodyBean() {
......
...@@ -52,9 +52,9 @@ public class MemberPresenter extends CommonPresenter { ...@@ -52,9 +52,9 @@ public class MemberPresenter extends CommonPresenter {
} }
} }
public void createOrder(MemberListBean.MemberCard card, int position) { public void createOrder(MemberListBean.MemberCard card,String phone ,int position) {
MemberOrderPostBodyBean memberOrderPostBodyBean = new MemberOrderPostBodyBean("", card.getLevel(), card.getId()); MemberOrderPostBodyBean memberOrderPostBodyBean = new MemberOrderPostBodyBean("", card.getLevel(), card.getId(),phone);
Map<String, Object> headMap = new LinkedHashMap<>(); Map<String, Object> headMap = new LinkedHashMap<>();
if (OkGoUtil.getToken() != null) if (OkGoUtil.getToken() != null)
headMap.put("Authorization", OkGoUtil.getToken()); headMap.put("Authorization", OkGoUtil.getToken());
......
package com.rv.member.view;
import android.content.Context;
import android.support.annotation.NonNull;
import android.text.TextUtils;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Toast;
import com.ruiwenliu.wrapper.dialog.BaseDialog;
import com.ruiwenliu.wrapper.weight.ToastView;
import com.rv.member.R;
public class InviterPhoneDialog extends BaseDialog {
private EditText edtInviterPhone;
private Button btnConfirm;
private ImageView ivClose;
public InviterPhoneDialog(@NonNull final Context context, String phone, final InputListener listener) {
super(context);
setDialogParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT, Gravity.CENTER);
edtInviterPhone = findViewById(R.id.edt_inviter_phone);
ivClose = findViewById(R.id.iv_close);
if (!TextUtils.isEmpty(phone)) {
edtInviterPhone.setText(phone);
edtInviterPhone.setSelection(phone.length());
}
btnConfirm = findViewById(R.id.btn_confirm);
ivClose.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dismiss();
}
});
btnConfirm.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String phone = edtInviterPhone.getText().toString().trim();
if (!TextUtils.isEmpty(phone) && phone.length() != 11) {
ToastView.getInstance(context).showToastContent("请输入正确的手机号", Toast.LENGTH_SHORT);
return;
}
if (listener != null) {
listener.input(phone);
}
dismiss();
}
});
}
@Override
public int getViewLayout() {
return R.layout.dialog_inviter_phone;
}
public interface InputListener {
void input(String phone);
}
}
...@@ -50,6 +50,9 @@ public class MemberTopView extends LinearLayout { ...@@ -50,6 +50,9 @@ public class MemberTopView extends LinearLayout {
private GridView gridview; private GridView gridview;
private MemberListBean bean; private MemberListBean bean;
private View viewLine; private View viewLine;
private TextView tvInviterPhone;
private String inviterPhone;
private MemberListBean.MemberCard selectCard; private MemberListBean.MemberCard selectCard;
...@@ -66,6 +69,8 @@ public class MemberTopView extends LinearLayout { ...@@ -66,6 +69,8 @@ public class MemberTopView extends LinearLayout {
private OnClickListener clickListener; private OnClickListener clickListener;
private InviterPhoneDialog dialog;
public MemberTopView(Context context) { public MemberTopView(Context context) {
super(context); super(context);
} }
...@@ -109,6 +114,7 @@ public class MemberTopView extends LinearLayout { ...@@ -109,6 +114,7 @@ public class MemberTopView extends LinearLayout {
imgFreeTop = view.findViewById(R.id.img_free_top); imgFreeTop = view.findViewById(R.id.img_free_top);
tvFreeTop = view.findViewById(R.id.tv_free_top); tvFreeTop = view.findViewById(R.id.tv_free_top);
viewLine = view.findViewById(R.id.view_line); viewLine = view.findViewById(R.id.view_line);
tvInviterPhone = view.findViewById(R.id.tv_inviter_phone);
if (TextUtils.isEmpty(OkGoUtil.getToken())) { if (TextUtils.isEmpty(OkGoUtil.getToken())) {
unlogin_view.setVisibility(View.VISIBLE); unlogin_view.setVisibility(View.VISIBLE);
logined_view.setVisibility(View.GONE); logined_view.setVisibility(View.GONE);
...@@ -119,6 +125,21 @@ public class MemberTopView extends LinearLayout { ...@@ -119,6 +125,21 @@ public class MemberTopView extends LinearLayout {
} }
} }
tvInviterPhone.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (dialog == null) {
dialog = new InviterPhoneDialog(getContext(),inviterPhone , new InviterPhoneDialog.InputListener() {
@Override
public void input(String phone) {
inviterPhone = phone;
}
});
}
dialog.show();
}
});
addView(view); addView(view);
} }
...@@ -173,7 +194,7 @@ public class MemberTopView extends LinearLayout { ...@@ -173,7 +194,7 @@ public class MemberTopView extends LinearLayout {
return; return;
} }
if (listener != null) { if (listener != null) {
listener.pay(selectCard); listener.pay(selectCard,inviterPhone);
} }
} }
}); });
......
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<!--背景颜色-->
<solid android:color="#ffffff" />
<!--设置圆角的角度-->
<corners android:radius="10dp" />
</shape>
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<!--背景颜色-->
<solid android:color="#F2F2F2" />
<!--设置圆角的角度-->
<corners android:radius="5dp" />
</shape>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/size_25"
android:layout_marginRight="@dimen/size_25"
android:background="@drawable/dialog_member_content_bg"
android:gravity="center_horizontal"
android:orientation="vertical"
android:paddingLeft="13dp"
android:paddingRight="13dp">
<ImageView
android:paddingLeft="@dimen/dp_10"
android:paddingTop="@dimen/dp_10"
android:id="@+id/iv_close"
android:layout_width="@dimen/size_20"
android:layout_height="@dimen/size_20"
android:layout_gravity="right"
android:layout_marginTop="3dp"
android:src="@drawable/icon_member_close" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_10"
android:text="邀请人手机号"
android:textColor="#171413"
android:textStyle="bold"
android:textSize="@dimen/text_16" />
<EditText
android:id="@+id/edt_inviter_phone"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_40"
android:layout_marginTop="@dimen/size_22"
android:background="@drawable/shape_rv_bg_inviter_phone"
android:gravity="left|center_vertical"
android:hint="请输入邀请人手机号"
android:inputType="phone"
android:maxLength="11"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:textColorHint="#CCCCCC"
android:textSize="@dimen/sp_14" />
<Button
android:id="@+id/btn_confirm"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_40"
android:layout_marginTop="@dimen/size_15"
android:layout_marginBottom="@dimen/size_15"
android:background="@drawable/shape_rv_bg_shallow_dark_yellow_circle"
android:gravity="center"
android:text="确定"
android:textColor="@color/white"
android:textSize="@dimen/sp_16" />
</LinearLayout>
</LinearLayout>
\ No newline at end of file
...@@ -148,6 +148,7 @@ ...@@ -148,6 +148,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="7dp" android:layout_marginTop="7dp"
android:layout_marginLeft="@dimen/size_5" android:layout_marginLeft="@dimen/size_5"
android:layout_marginRight="@dimen/size_15"
android:gravity="center_vertical|left" android:gravity="center_vertical|left"
android:orientation="horizontal"> android:orientation="horizontal">
...@@ -162,13 +163,28 @@ ...@@ -162,13 +163,28 @@
<TextView <TextView
android:id="@+id/tv_agreement" android:id="@+id/tv_agreement"
android:layout_width="wrap_content" android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="@dimen/size_30" android:layout_height="@dimen/size_30"
android:gravity="center_vertical" android:gravity="center_vertical"
android:layout_marginRight="@dimen/dp_10" android:layout_marginRight="@dimen/dp_10"
android:text="@string/tv_agreement" android:text="@string/tv_agreement"
android:textSize="@dimen/sp_12" /> android:textSize="@dimen/sp_12" />
<TextView
android:inputType="phone"
android:maxLength="11"
android:id="@+id/tv_inviter_phone"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:background="@color/colorWrite"
android:gravity="center_vertical"
android:text="内部邀请人"
android:textColor="@color/text_Gray"
android:textSize="@dimen/text_12" />
</LinearLayout> </LinearLayout>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment