Commit d1d8b925 by 罗翻

android 混淆

parent d822891d
apply plugin: 'com.android.application'
apply plugin: 'org.greenrobot.greendao'
android {
compileSdkVersion 25
buildToolsVersion '26.0.2'
aaptOptions {
cruncherEnabled = false
useNewCruncher = false
}
signingConfigs {
release {
keyAlias 'keybigfish'
......@@ -9,12 +16,6 @@ android {
storePassword '123456789'
}
}
compileSdkVersion 25
buildToolsVersion '26.0.2'
aaptOptions {
cruncherEnabled = false
useNewCruncher = false
}
defaultConfig {
applicationId "com.dayu.bigfish"
minSdkVersion 16
......@@ -24,7 +25,7 @@ android {
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
multiDexEnabled true
}
//Java8
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
......@@ -32,13 +33,15 @@ android {
buildTypes {
release {
signingConfig android.signingConfigs.release
minifyEnabled false
minifyEnabled true
shrinkResources true //是否清理无用资源,依赖于minifyEnabled
zipAlignEnabled true //是否启用zipAlign压缩
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
debug {
signingConfig android.signingConfigs.release
minifyEnabled false
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
......@@ -84,8 +87,6 @@ dependencies {
//注解工具
compile 'com.jakewharton:butterknife:8.1.0'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.1.0'
//友盟统计
compile 'com.umeng.analytics:analytics:latest.integration'
//greendao数据库
compile 'org.greenrobot:greendao:3.2.0'
......@@ -101,6 +102,7 @@ dependencies {
compile 'com.squareup.retrofit2:converter-gson:2.3.0'
compile 'com.squareup.retrofit2:adapter-rxjava2:2.3.0'
compile 'com.squareup.okhttp3:logging-interceptor:3.8.0'
//jsbridge
compile 'com.github.lzyzsd:jsbridge:1.0.4'
......
......@@ -23,6 +23,10 @@
# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile
#----------------------------------------------------------------------------
#---------------------------------------------------------------------------------------------------
#-------------------------------------------基本不用动区域--------------------------------------------
#---------------------------------基本指令区----------------------------------
-optimizationpasses 5
......@@ -33,14 +37,14 @@
-verbose
-printmapping proguardMapping.txt
-optimizations !code/simplification/cast,!field/*,!class/merging/*
-keepattributes *Annotation*,InnerClasses
-keepattributes Signature
-adaptclassstrings
-keepattributes InnerClasses, EnclosingMethod, Signature, *Annotation*,Exceptions
-keepattributes SourceFile,LineNumberTable
#----------------------------------------------------------------------------
#---------------------------------默认保留区---------------------------------
-keep public class * extends android.app.Activity
-keep public class * extends android.app.Appliction
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
......@@ -88,42 +92,48 @@
-keepclassmembers class * {
void *(**On*Event);
}
#----------------------------------------------------------------------------
#---------------------------------webview------------------------------------
-keepclassmembers class fqcn.of.javascript.interface.for.webview {
-keepclassmembers class fqcn.of.javascript.interface.for.Webview {
public *;
}
-keepclassmembers class * extends android.webkit.webViewClient {
-keepclassmembers class * extends android.webkit.WebViewClient {
public void *(android.webkit.WebView, java.lang.String, android.graphics.Bitmap);
public boolean *(android.webkit.WebView, java.lang.String);
}
-keepclassmembers class * extends android.webkit.webViewClient {
public void *(android.webkit.webView, jav.lang.String);
-keepclassmembers class * extends android.webkit.WebViewClient {
public void *(android.webkit.WebView, jav.lang.String);
}
#----------------------------------------------------------------------------
#-----------------AOP----------------------------------------------------------------------------------
#-------------------------------------------定制化区域----------------------------------------------
#---------------------------------1.实体类---------------------------------
-adaptclassstrings
-keepattributes InnerClasses, EnclosingMethod, Signature, *Annotation*
-keep class com.dayu.bigfish.bean.** { *; }
-keep class com.dayu.bigfish.base.** { *; }
#-------------------------------------------------------------------------
#---------------------------------2.第三方包-------------------------------
#retrofit
-dontwarn okio.**
-dontwarn com.google.**
-dontwarn javax.annotation.**
-dontwarn javax.annotation.Nullable
-dontwarn javax.annotation.ParametersAreNonnullByDefault
-dontwarn okio.**
-dontwarn retrofit2.**
-keep class retrofit2.** { *; }
-dontwarn javax.inject.**
# OkHttp3
-dontwarn okhttp3.logging.**
-keep class okhttp3.internal.**{*;}
#############################################
#PictureSelector 2.0
-keep class com.luck.picture.lib.** { *; }
-dontwarn com.yalantis.ucrop**
-keep class com.yalantis.ucrop** { *; }
-keep interface com.yalantis.ucrop** { *; }
#rxjava
# RxJava RxAndroid
-dontwarn sun.misc.**
-keepclassmembers class rx.internal.util.unsafe.*ArrayQueue*Field* {
long producerIndex;
......@@ -136,18 +146,19 @@
rx.internal.util.atomic.LinkedQueueNode consumerNode;
}
#rxandroid
-dontwarn sun.misc.**
-keepclassmembers class rx.internal.util.unsafe.*ArrayQueue*Field* {
long producerIndex;
long consumerIndex;
}
-keepclassmembers class rx.internal.util.unsafe.BaseLinkedQueueProducerNodeRef {
rx.internal.util.atomic.LinkedQueueNode producerNode;
}
-keepclassmembers class rx.internal.util.unsafe.BaseLinkedQueueConsumerNodeRef {
rx.internal.util.atomic.LinkedQueueNode consumerNode;
}
# Gson
-keep class com.google.gson.stream.** { *; }
-keepattributes EnclosingMethod
#PictureSelector 2.0
-keep class com.luck.picture.lib.** { *; }
-dontwarn com.yalantis.ucrop**
-keep class com.yalantis.ucrop** { *; }
-keep interface com.yalantis.ucrop** { *; }
#glide
-keep public class * implements com.bumptech.glide.module.GlideModule
......@@ -180,10 +191,6 @@ public static java.lang.String TABLENAME;
# If you do not use Rx:
-dontwarn rx.**
#xutils
-keep class * extends java.lang.annotation.Annotation { *; }
#环信
-keep class com.hyphenate.** {*;}
-dontwarn com.hyphenate.**
......@@ -194,4 +201,21 @@ public static java.lang.String TABLENAME;
-keep class com.autonavi.aps.amapapi.model.**{*;}
#友盟
-keep class com.umeng.commonsdk.** {*;}
-keepclassmembers class * {
public <init> (org.json.JSONObject);
}
-keep public class com.dayu.bigfish.R$*{
public static final int *;
}
#---------------------------------3.与js互相调用的类------------------------
#---------------------------------4.反射相关的类和方法-----------------------
......@@ -21,6 +21,8 @@
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.access_network_state"/>
<!--读取日志-->
<uses-permission android:name="android.permission.READ_LOGS"/>
<!--用于进行网络定位-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
......@@ -37,18 +39,6 @@
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"></uses-permission>
<!--7.0以上拍照适配-->
<!--<provider-->
<!--android:name="android.support.v4.content.FileProvider"-->
<!--android:authorities="com.dayu.bigfish.takephoto.fileprovider"-->
<!--android:exported="false"-->
<!--android:grantUriPermissions="true">-->
<!--<meta-data-->
<!--android:name="android.support.FILE_PROVIDER_PATHS"-->
<!--android:resource="@xml/file_paths"/>-->
<!--</provider>-->
<application
android:name=".MyApplication"
android:allowBackup="true"
......@@ -80,7 +70,7 @@
<activity
android:name=".SplashActivity"
android:screenOrientation="portrait"
android:theme="@style/SplashTheme"
>
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
......@@ -92,6 +82,7 @@
<meta-data
android:name="UMENG_APPKEY"
android:value="599a41697f2c743210000990"/>
<meta-data
android:name="UMENG_CHANNEL"
android:value="Channel ID"/>
......@@ -126,6 +117,11 @@
</receiver>
<activity
android:name=".InitializeActivity"
android:screenOrientation="portrait"
/>
<activity
android:name=".ui.LoginActivity"
android:screenOrientation="portrait"
/>
......@@ -147,8 +143,8 @@
/>
<activity
android:name=".ui.ProcessOrderActivity"
android:screenOrientation="portrait"
android:launchMode="singleTask"
android:screenOrientation="portrait"
/>
<activity
android:name=".ui.PreviewActivty"
......@@ -180,6 +176,7 @@
/>
<activity
android:name=".ui.MainActivity"
android:launchMode="singleTask"
android:screenOrientation="portrait"
/>
<activity
......
......@@ -23,7 +23,7 @@ public class Constants {
public static final int DEBUGLEVEL = LogUtils.LEVEL_ALL;
public static final String BASE_URL = "http://47.94.101.239:3112";
public final static String UP_PHOTO = "/file/uploadMore?targetPath=test/sp/mobile/android/business/checkApply";
public final static String WEB_SOP = "http://192.168.1.117:8080/#/sop";
public final static String WEB_SOP = "http://47.94.101.239:9004/#/sop";
/**************************正式环境*******************************/
// public static final int DEBUGLEVEL = LogUtils.LEVEL_OFF;
......
package com.dayu.bigfish;
import android.Manifest;
import android.annotation.TargetApi;
import android.app.Activity;
import android.app.Dialog;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.provider.Settings;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Toast;
import com.dayu.bigfish.ui.LoginActivity;
import com.dayu.bigfish.ui.MainActivity;
import com.dayu.bigfish.ui.views.CustomDialog;
import com.dayu.bigfish.utils.managers.UserManager;
import java.util.concurrent.TimeUnit;
import io.reactivex.Observable;
public class InitializeActivity extends AppCompatActivity {
private static final int SDK_PERMISSION_REQUEST = 1;
private Activity mActivity;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
supportRequestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
mActivity = this;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {//判断当前系统的SDK版本是否大于23
if (!(checkSelfPermission(Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_GRANTED)
|| !(checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED)
|| !(checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED)) {
requestPermissions(new String[]{Manifest.permission.READ_PHONE_STATE, Manifest.permission.WRITE_EXTERNAL_STORAGE
, Manifest.permission.ACCESS_COARSE_LOCATION}, SDK_PERMISSION_REQUEST);
}
}
}
@Override
protected void onResume() {
super.onResume();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {//判断当前系统的SDK版本是否大于23
if ((checkSelfPermission(Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_GRANTED)
&& (checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED)
&& (checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED)) {
doJump();
}
} else {
doJump();
}
}
/*权限回调*/
@TargetApi(23)
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
boolean flag = true;
if (requestCode == SDK_PERMISSION_REQUEST) {
for (int grant : grantResults) {
if (grant != PackageManager.PERMISSION_GRANTED) {
flag = false;
}
}
if (!flag) {
CustomDialog dialog = new CustomDialog(mActivity, R.style.custom_dialog2, getString(R.string.please_open__permission)
, new CustomDialog.OnCloseListener() {
@Override
public void onClick(Dialog dialog, boolean confirm) {
if (confirm) {
Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
intent.setData(Uri.parse("package:" + getPackageName())); // 根据包名打开对应的设置界面
startActivity(intent);
dialog.dismiss();
} else {
Toast.makeText(mActivity, getString(R.string.no_permission), Toast.LENGTH_SHORT).show();
finish();
dialog.dismiss();
}
}
});
dialog.setTitle(getString(R.string.notice))
.setNegativeButton(getString(R.string.cancle))
.setPositiveButton(getString(R.string.go_setting));
dialog.show();
return;
}
}
}
private void doJump() {
Intent intent;
if (UserManager.getInstance().hasUserInfo(this)) {
intent = new Intent(InitializeActivity.this, MainActivity.class);
} else {
intent = new Intent(InitializeActivity.this, LoginActivity.class);
}
Observable.timer(2000, TimeUnit.MICROSECONDS).subscribe(
aLong -> {
startActivity(intent);
finish();
}
);
}
@Override
protected void onPause() {
super.onPause();
}
}
package com.dayu.bigfish;
import android.app.ActivityManager;
import android.content.Context;
import android.content.IntentFilter;
import android.net.ConnectivityManager;
......@@ -12,11 +11,10 @@ import android.support.multidex.MultiDexApplication;
import com.dayu.bigfish.greendao.GreenDaoManager;
import com.dayu.bigfish.utils.LocationUtils;
import com.dayu.bigfish.utils.NetworkConnectChangedReceiver;
import com.hyphenate.chat.EMClient;
import com.hyphenate.chat.EMOptions;
import java.util.Iterator;
import java.util.List;
import com.dayu.bigfish.utils.managers.HxManager;
import com.umeng.analytics.MobclickAgent;
import com.umeng.analytics.MobclickAgent.EScenarioType;
import com.umeng.commonsdk.UMConfigure;
/**
* 全局的相关配置
......@@ -28,8 +26,6 @@ public class MyApplication extends MultiDexApplication {
private static Context mContext;
private static Handler mHandler;
private static int mMainThreadId;
// 记录环信是否已经初始化
private boolean isInit = false;
/**
* 程序的入口方法
......@@ -42,7 +38,6 @@ public class MyApplication extends MultiDexApplication {
filter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
registerReceiver(new NetworkConnectChangedReceiver(), filter);
MultiDex.install(this);
//上下文
mContext = getApplicationContext();
// 主线程的Handler
......@@ -51,69 +46,24 @@ public class MyApplication extends MultiDexApplication {
mMainThreadId = android.os.Process.myTid();
//初始化greendao
GreenDaoManager.getInstance();
// 初始化环信SDK
EMOptions options = new EMOptions();
options.setAutoLogin(true);
//初始化
EMClient.getInstance().init(getContext(), options);
//在做打包混淆时,关闭debug模式,避免消耗不必要的资源
EMClient.getInstance().setDebugMode(true);
initEasemob();
//初始化高德地图
LocationUtils.init(getApplicationContext());
//初始化友盟
initUM();
//初始化环信
HxManager.getInstance().init(mContext);
MultiDex.install(this);
}
private void initEasemob() {
// 获取当前进程 id 并取得进程名
int pid = android.os.Process.myPid();
String processAppName = getAppName(pid);
/**
* 如果app启用了远程的service,此application:onCreate会被调用2次
* 为了防止环信SDK被初始化2次,加此判断会保证SDK被初始化1次
* 默认的app会在以包名为默认的process name下运行,如果查到的process
* name不是app的process name就立即返回
*/
if (processAppName == null || !processAppName.equalsIgnoreCase(this.getPackageName())) {
// 则此application的onCreate 是被service 调用的,直接返回
return;
}
if (isInit) {
return;
}
private void initUM() {
MobclickAgent.setDebugMode(true);
UMConfigure.init(this, UMConfigure.DEVICE_TYPE_PHONE, null);
UMConfigure.setLogEnabled(true);
UMConfigure.setEncryptEnabled(true);
MobclickAgent.setScenarioType(mContext, EScenarioType.E_UM_NORMAL);
}
/**
* 根据Pid获取当前进程的名字,一般就是当前app的包名
*
* @param pid 进程的id
* @return 返回进程的名字
*/
private String getAppName(int pid) {
String processName = null;
ActivityManager activityManager = (ActivityManager) this.getSystemService(Context.ACTIVITY_SERVICE);
List list = activityManager.getRunningAppProcesses();
Iterator i = list.iterator();
while (i.hasNext()) {
ActivityManager.RunningAppProcessInfo info = (ActivityManager.RunningAppProcessInfo) (i.next());
try {
if (info.pid == pid) {
// 根据进程的信息获取当前进程的名字
processName = info.processName;
// 返回当前进程名
return processName;
}
} catch (Exception e) {
e.printStackTrace();
}
}
// 没有匹配的项,返回为null
return null;
}
/**
* 得到全局上下文,慎用
*/
public static Context getContext() {
return mContext;
}
......
package com.dayu.bigfish;
import android.Manifest;
import android.annotation.TargetApi;
import android.app.Activity;
import android.app.Dialog;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.provider.Settings;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Toast;
import com.dayu.bigfish.bean.InformBean;
import com.dayu.bigfish.bean.event.RefreReceiveData;
import com.dayu.bigfish.bean.event.RefreshTab;
import com.dayu.bigfish.bean.event.RxBus;
import com.dayu.bigfish.ui.LoginActivity;
import com.dayu.bigfish.ui.MainActivity;
import com.dayu.bigfish.ui.views.CustomDialog;
import com.dayu.bigfish.utils.managers.UserManager;
import com.google.gson.Gson;
import com.hyphenate.EMConnectionListener;
import com.hyphenate.EMError;
import com.hyphenate.EMMessageListener;
import com.hyphenate.chat.EMMessage;
import com.hyphenate.util.NetUtils;
import java.util.List;
import java.util.concurrent.TimeUnit;
import io.reactivex.Observable;
import io.reactivex.disposables.Disposable;
public class SplashActivity extends AppCompatActivity {
private static final int SDK_PERMISSION_REQUEST = 1;
int ID = 0x123;
private String str;
private String strTwo;
private Activity mActivity;
private Disposable mDisapode;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
supportRequestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
mActivity = this;
//注册环信消息监听
// EMClient.getInstance().chatManager().addMessageListener(msgListener);
//注册一个监听连接状态的listener
// EMClient.getInstance().addConnectionListener(new MyConnectionListener());
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {//判断当前系统的SDK版本是否大于23
if (!(checkSelfPermission(Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_GRANTED)
|| !(checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED)
|| !(checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED)) {
requestPermissions(new String[]{Manifest.permission.READ_PHONE_STATE, Manifest.permission.WRITE_EXTERNAL_STORAGE
, Manifest.permission.ACCESS_COARSE_LOCATION}, SDK_PERMISSION_REQUEST);
}
}
}
@Override
protected void onResume() {
super.onResume();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {//判断当前系统的SDK版本是否大于23
if ((checkSelfPermission(Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_GRANTED)
&& (checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED)
&& (checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED)) {
doJump();
}
} else {
doJump();
}
}
//注册监听事件
EMMessageListener msgListener = new EMMessageListener() {
@Override
public void onMessageReceived(List<EMMessage> messages) {
//收到消息
for (EMMessage list : messages) {
//异步刷新各Tab状态数量
RxBus.getDefault().post(new RefreshTab(0));
//打开消息列表界面
Intent intent = new Intent(SplashActivity.this, MainActivity.class);
intent.putExtra(Constants.DUMP_INDEX, 3);
PendingIntent pi = PendingIntent.getActivity(SplashActivity.this,
0, intent, 0);
str = list.getBody().toString();
str = str.substring(5);
strTwo = str.substring(0, str.length() - 1);
Gson gson = new Gson();
InformBean informBean = gson.fromJson(list.ext().toString(), InformBean.class);
Notification.Builder builder = new Notification.Builder(SplashActivity.this);
builder
// 设置打开通知,该通知取消
.setAutoCancel(true)
// 设置通知提示信息
.setTicker("工单有新消息")
// 设置通知的图标
.setSmallIcon(R.mipmap.logo)
// 设置通知的标题
// .setContentTitle(list.getFrom())
.setContentTitle(informBean.getTitle())
// 设置通知的内容
.setContentText(strTwo)
// 设置使用系统默认的声音、LED
.setDefaults(
Notification.DEFAULT_LIGHTS
| Notification.DEFAULT_SOUND)
// 设置通知发布时间
.setWhen(System.currentTimeMillis())
// 设置将要启动的活动
.setContentIntent(pi)
.build();
Notification notification = builder.build();
NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
manager.notify(ID, notification);
}
}
@Override
public void onCmdMessageReceived(List<EMMessage> messages) {
//收到透传消息
for (EMMessage list : messages) {
RxBus.getDefault().post(new RefreReceiveData(0));
}
}
@Override
public void onMessageRead(List<EMMessage> messages) {
//收到已读回执
}
@Override
public void onMessageDelivered(List<EMMessage> message) {
//收到已送达回执
}
@Override
public void onMessageRecalled(List<EMMessage> messages) {
//消息被撤回
}
@Override
public void onMessageChanged(EMMessage message, Object change) {
//消息状态变动
}
};
//实现ConnectionListener接口 监听环信连接状态
private class MyConnectionListener implements EMConnectionListener {
@Override
public void onConnected() {
}
@Override
public void onDisconnected(final int error) {
runOnUiThread(new Runnable() {
@Override
public void run() {
if (error == EMError.USER_REMOVED) {
// 显示帐号已经被移除
} else if (error == EMError.USER_LOGIN_ANOTHER_DEVICE) {
// 显示帐号在其他设备登录
} else {
if (NetUtils.hasNetwork(SplashActivity.this)) {
//连接不到聊天服务器
} else {
//当前网络不可用,请检查网络设置
}
}
}
});
}
}
/*权限回调*/
@TargetApi(23)
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
boolean flag = true;
if (requestCode == SDK_PERMISSION_REQUEST) {
for (int grant : grantResults) {
if (grant != PackageManager.PERMISSION_GRANTED) {
flag = false;
}
}
if (!flag) {
CustomDialog dialog = new CustomDialog(mActivity, R.style.custom_dialog2, getString(R.string.please_open__permission)
, new CustomDialog.OnCloseListener() {
@Override
public void onClick(Dialog dialog, boolean confirm) {
if (confirm) {
Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
intent.setData(Uri.parse("package:" + getPackageName())); // 根据包名打开对应的设置界面
startActivity(intent);
dialog.dismiss();
} else {
Toast.makeText(mActivity, getString(R.string.no_permission), Toast.LENGTH_SHORT).show();
finish();
dialog.dismiss();
}
}
});
dialog.setTitle(getString(R.string.notice))
.setNegativeButton(getString(R.string.cancle))
.setPositiveButton(getString(R.string.go_setting));
dialog.show();
return;
}
}
}
private void doJump() {
Intent intent;
if (UserManager.getInstance().hasUserInfo(this)) {
intent = new Intent(SplashActivity.this, MainActivity.class);
} else {
intent = new Intent(SplashActivity.this, LoginActivity.class);
}
Observable.timer(2000, TimeUnit.MICROSECONDS).subscribe(
aLong -> {
startActivity(intent);
startActivity(new Intent(this, InitializeActivity.class));
finish();
}
);
}
@Override
protected void onDestroy() {
super.onDestroy();
if (mDisapode != null) {
mDisapode.dispose();
}
}
}
......@@ -19,7 +19,6 @@ import io.reactivex.ObservableOnSubscribe;
import io.reactivex.ObservableSource;
import io.reactivex.ObservableTransformer;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.functions.Function;
import io.reactivex.schedulers.Schedulers;
import okhttp3.Interceptor;
import okhttp3.OkHttpClient;
......@@ -128,7 +127,6 @@ public class Api {
}
} else {
if (!e.isDisposed()) {
Log.d("request+errorMessag:", response.getMsg());
e.onError(new ServerException(response.getCode(), response.getMsg()));
}
return;
......@@ -170,7 +168,7 @@ public class Api {
public ObservableSource apply(Observable upstream) {
return upstream.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.flatMap((Function) (response) -> flatResponse((BaseResponse<Object>) response));
.flatMap((response) -> flatResponse((BaseResponse<Object>) response));
}
};
......
......@@ -3,6 +3,7 @@ package com.dayu.bigfish.base;
import android.app.Activity;
import android.app.Dialog;
import android.content.Intent;
import android.util.Log;
import com.dayu.bigfish.R;
import com.dayu.bigfish.api.APIException;
......@@ -105,6 +106,7 @@ public abstract class BasePresenter<V> {
@Override
public void onError(Throwable e) {
Log.d("reguest+error", e.toString());
ProgressUtil.stopLoad();
processException(e);
try {
......
package com.dayu.bigfish.presenter.login;
import android.util.Log;
import com.app.annotation.apt.InstanceFactory;
import com.apt.ApiFactory;
import com.dayu.bigfish.bean.UserInfo;
......@@ -14,7 +16,6 @@ import io.reactivex.functions.Consumer;
public class LoginPresenter extends LoginContract.Presenter {
@Override
public void sendRegister(String userPhone, int type) {
ApiFactory.sendCode(userPhone, type).subscribe(baseObserver(new Consumer<Boolean>() {
......@@ -28,17 +29,6 @@ public class LoginPresenter extends LoginContract.Presenter {
mView.sendRegisterFail(throwable);
}
}));
// mModel.sendRegister(userPhone, type).subscribe(baseObserver(new Consumer<Boolean>() {
// @Override
// public void accept(Boolean aBoolean) throws Exception {
// mView.sendRegisterSuccess(aBoolean);
// }
// }, new Consumer<Throwable>() {
// @Override
// public void accept(Throwable throwable) throws Exception {
// mView.sendRegisterFail(throwable);
// }
// }));
}
@Override
......@@ -51,20 +41,10 @@ public class LoginPresenter extends LoginContract.Presenter {
}, new Consumer<Throwable>() {
@Override
public void accept(Throwable throwable) throws Exception {
Log.d("request", throwable.toString());
mView.loginFail(throwable);
}
}));
// mModel.login(userPhone, register).subscribe(baseObserver(new Consumer<UserInfo>() {
// @Override
// public void accept(UserInfo info) throws Exception {
// mView.loginSuccess(info);
// }
// }, new Consumer<Throwable>() {
// @Override
// public void accept(Throwable throwable) throws Exception {
// mView.loginFail(throwable);
// }
// }));
}
@Override
......
......@@ -11,14 +11,14 @@ import android.widget.TextView;
import com.dayu.bigfish.R;
import com.dayu.bigfish.base.BaseActivity;
import com.dayu.bigfish.bean.UserInfo;
import com.dayu.bigfish.utils.managers.UserManager;
import com.dayu.bigfish.presenter.login.LoginContract;
import com.dayu.bigfish.presenter.login.LoginPresenter;
import com.dayu.bigfish.ui.views.ClearEditText;
import com.dayu.bigfish.utils.ProgressUtil;
import com.dayu.bigfish.utils.TimeCountUtil;
import com.dayu.bigfish.utils.ToastUtils;
import com.dayu.bigfish.utils.UtilsUserAccountMatcher;
import com.dayu.bigfish.ui.views.ClearEditText;
import com.dayu.bigfish.utils.managers.UserManager;
import com.hyphenate.EMCallBack;
import com.hyphenate.chat.EMClient;
......@@ -57,6 +57,7 @@ public class LoginActivity extends BaseActivity<LoginPresenter> implements Login
public void loginSuccess(UserInfo info) {
hxUserId = info.getHxAccount();
hxUserPwd = info.getHxPwd();
UserManager.getInstance().saveUserInfo(this, info);
if (!(TextUtils.isEmpty(hxUserId)) && !(TextUtils.isEmpty(hxUserPwd))) {
EMClient.getInstance().login(hxUserId, hxUserPwd, new EMCallBack() {
......@@ -83,6 +84,7 @@ public class LoginActivity extends BaseActivity<LoginPresenter> implements Login
@Override
public void loginFail(Throwable throwable) {
ToastUtils.showShortToast(throwable.toString());
ToastUtils.showShortToast("登录失败");
}
......
......@@ -36,6 +36,7 @@ import com.dayu.bigfish.utils.GetUserInfo;
import com.dayu.bigfish.utils.LocationUtils;
import com.dayu.bigfish.utils.SPUtils;
import com.dayu.bigfish.utils.ToastUtils;
import com.umeng.analytics.MobclickAgent;
import java.io.File;
......@@ -66,7 +67,6 @@ public class MainActivity extends BaseActivity<MainPresenter> implements MainCon
private Fragment[] mFragments;
private int mAccountId;
private int mSiteId;
private int mReceivingNum;
@Override
public int getLayoutId() {
......@@ -115,6 +115,15 @@ public class MainActivity extends BaseActivity<MainPresenter> implements MainCon
@Override
protected void onResume() {
super.onResume();
MobclickAgent.onResume(this);
MobclickAgent.onPageStart("main");
}
@Override
protected void onPause() {
super.onPause();
MobclickAgent.onPause(this);
MobclickAgent.onPageEnd("main");
}
@OnClick({R.id.tab_first, R.id.tab_second, R.id.tab_third, R.id.tab_four, R.id.tab_get_order})
......@@ -206,7 +215,6 @@ public class MainActivity extends BaseActivity<MainPresenter> implements MainCon
@Override
public void getReceiveOrderSuccess(BasePageBean<Order> orders) {
mReceivingNum = orders.getTotalRows();
mGetOrderTv.setText(orders.getTotalRows() + "");
}
......@@ -261,7 +269,6 @@ public class MainActivity extends BaseActivity<MainPresenter> implements MainCon
dialog.show();
}
@Override
protected void onDestroy() {
super.onDestroy();
......
......@@ -12,12 +12,12 @@ import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.widget.ImageView;
import android.widget.ProgressBar;
import com.dayu.bigfish.Constants;
import com.dayu.bigfish.R;
import com.dayu.bigfish.bean.event.OrderState;
import com.dayu.bigfish.bean.event.RxBus;
import com.dayu.bigfish.utils.GetUserInfo;
import com.github.lzyzsd.jsbridge.BridgeHandler;
import com.github.lzyzsd.jsbridge.BridgeWebView;
import com.github.lzyzsd.jsbridge.CallBackFunction;
......@@ -42,11 +42,11 @@ public class SopWebViewActivity extends AppCompatActivity {
private String mToken;
private int mOrderId;
private int mPositon;
private ProgressBar pb;
ValueCallback<Uri> mUploadMessage;
ValueCallback<Uri[]> uploadMessageAboveL;
int RESULT_CODE = 0;
int RESULT_CODE_FOR_Lollipop = 1;
private SopWebViewActivity mActivity;
@Override
......@@ -54,7 +54,8 @@ public class SopWebViewActivity extends AppCompatActivity {
super.onCreate(savedInstanceState);
this.setContentView(R.layout.activity_webview_layout);
ButterKnife.bind(this);
mToken = getIntent().getStringExtra(Constants.TOKEN);
mActivity = this;
mToken = GetUserInfo.getToken(mActivity);
mOrderId = getIntent().getIntExtra(Constants.ORDER_ID, 0);
mPositon = getIntent().getIntExtra(Constants.ORDER_POSTION, 0);
mBackTitle.setOnClickListener(o -> finish());
......@@ -118,10 +119,6 @@ public class SopWebViewActivity extends AppCompatActivity {
@Override
public void onProgressChanged(WebView view, int newProgress) {
// pb.setProgress(newProgress);
// if (newProgress >= 100) {
// pb.setVisibility(View.GONE);
// }
}
});
......@@ -142,7 +139,7 @@ public class SopWebViewActivity extends AppCompatActivity {
public void handler(String data, CallBackFunction function) {
if ("1".equals(data)) {
RxBus.getDefault().post(new OrderState(ORDER_SOP_FINISH, mPositon));
Intent intent = new Intent(SopWebViewActivity.this, ProcessOrderActivity.class);
Intent intent = new Intent(mActivity, ProcessOrderActivity.class);
intent.putExtra(Constants.ORDER_ID, mOrderId);
intent.putExtra(Constants.ORDER_POSTION, mPositon);
startActivity(intent);
......
......@@ -228,6 +228,7 @@ public class OrderDoingAdapter extends BaseQuickAdapter<Order, BaseViewHolder> {
if (mItem.getStatus() == 4) {
return;
}
if (mItem.getStatus() == 3) {
ProgressUtil.startLoad(mContext);
LocationUtils.getCurrentLocation(new LocationUtils.MyLocationListener() {
@Override
......@@ -238,7 +239,7 @@ public class OrderDoingAdapter extends BaseQuickAdapter<Order, BaseViewHolder> {
latitude = location.getLatitude();
longitude = location.getLongitude();
}
if (mItem.getStatus() == 3 && mItem.getSubStatus() == 1) {
if (mItem.getSubStatus() == 1) {
mPresenter.startOrder(mItem.getId(), latitude, longitude)
.observeOn(AndroidSchedulers.mainThread())
.subscribe(mPresenter.baseObserver(new Consumer<Integer>() {
......@@ -250,7 +251,7 @@ public class OrderDoingAdapter extends BaseQuickAdapter<Order, BaseViewHolder> {
mHolder.setText(R.id.tv_item_process, "开始服务");
}
}));
} else if (mItem.getStatus() == 3 && mItem.getSubStatus() == 2) {
} else if (mItem.getSubStatus() == 2) {
mPresenter.startServer(mItem.getId(), latitude, longitude)
.observeOn(AndroidSchedulers.mainThread())
.subscribe(mPresenter.baseObserver(new Consumer<Integer>() {
......@@ -268,6 +269,7 @@ public class OrderDoingAdapter extends BaseQuickAdapter<Order, BaseViewHolder> {
}
});
}
}
private void dumpSubcribeTimeActivity(int id, int adapterPosition, int state) {
......
......@@ -40,7 +40,7 @@ public class BigFishMessageFragment extends BaseFragment<SysMessagePresenter> im
public View initView(View view) {
hxUserId = GetUserInfo.getHxUserId(mActivity);
ProgressUtil.startLoad(mActivity);
mPresenter.getHxMessage(hxUserId, 1, mPage, mPageSize);
mPresenter.getHxMessage(hxUserId, 2, mPage, mPageSize);
mAdapter = new SystemMessageAdapter(R.layout.message_adapter);
mRecyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
mRecyclerView.setAdapter(mAdapter);
......
package com.dayu.bigfish.utils.managers;
import android.app.ActivityManager;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.support.v4.app.NotificationCompat;
import com.dayu.bigfish.Constants;
import com.dayu.bigfish.R;
import com.dayu.bigfish.bean.InformBean;
import com.dayu.bigfish.bean.event.RefreReceiveData;
import com.dayu.bigfish.bean.event.RefreshTab;
import com.dayu.bigfish.bean.event.RxBus;
import com.dayu.bigfish.ui.MainActivity;
import com.google.gson.Gson;
import com.hyphenate.EMMessageListener;
import com.hyphenate.chat.EMClient;
import com.hyphenate.chat.EMMessage;
import com.hyphenate.chat.EMOptions;
import java.util.Iterator;
import java.util.List;
/**
* Created by luofan on 2017/12/1.
*/
public class HxManager {
private static HxManager instance;
private boolean sdkInited = false;
private Context mContext;
private HxManager() {
}
/**
* @return
*/
public synchronized static HxManager getInstance() {
if (instance == null) {
instance = new HxManager();
}
return instance;
}
public synchronized boolean init(Context context) {
mContext = context;
if (sdkInited) {
return true;
}
EMOptions options = new EMOptions();
options.setAutoLogin(true);
//初始化
EMClient.getInstance().init(context, options);
//在做打包混淆时,关闭debug模式,避免消耗不必要的资源
EMClient.getInstance().setDebugMode(true);
initEasemob();
initEM();
sdkInited = true;
return true;
}
private void initEM() {
//注册监听事件
EMMessageListener msgListener = new EMMessageListener() {
@Override
public void onMessageReceived(List<EMMessage> messages) {
//收到消息
for (EMMessage list : messages) {
//异步刷新各Tab状态数量
RxBus.getDefault().post(new RefreshTab(0));
//打开消息列表界面
Intent intent = new Intent(mContext, MainActivity.class);
intent.putExtra(Constants.DUMP_INDEX, 3);
PendingIntent pi = PendingIntent.getActivity(mContext,
0, intent, 0);
String str = list.getBody().toString();
Gson gson = new Gson();
InformBean info = gson.fromJson(list.ext().toString(), InformBean.class);
String title = "";
if (info.getCategory() == 1) {
title = "系统通知";
} else if (info.getCategory() == 2) {
title = "大于通知";
}
NotificationManager notificationManager = (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE);
NotificationCompat.Builder builder = new NotificationCompat.Builder(mContext);
// 设置打开通知,该通知取消
builder.setAutoCancel(true)
// 设置通知提示信息
.setTicker(info.getTitle())
// 设置通知的图标
.setSmallIcon(R.mipmap.logo)
// 设置通知的标题
.setContentTitle(title)
// 设置通知的内容
.setContentText(str)
// 设置使用系统默认的声音、LED
.setDefaults(
Notification.DEFAULT_LIGHTS
| Notification.DEFAULT_SOUND)
// 设置通知发布时间
.setWhen(System.currentTimeMillis())
// 设置将要启动的活动
.setContentIntent(pi)
.build();
notificationManager.notify(0, builder.build());
}
}
@Override
public void onCmdMessageReceived(List<EMMessage> messages) {
//收到透传消息
for (EMMessage list : messages) {
RxBus.getDefault().post(new RefreReceiveData(0));
}
}
@Override
public void onMessageRead(List<EMMessage> messages) {
//收到已读回执
}
@Override
public void onMessageDelivered(List<EMMessage> message) {
//收到已送达回执
}
@Override
public void onMessageRecalled(List<EMMessage> messages) {
//消息被撤回
}
@Override
public void onMessageChanged(EMMessage message, Object change) {
//消息状态变动
}
};
//注册环信消息监听
EMClient.getInstance().chatManager().addMessageListener(msgListener);
}
private void initEasemob() {
// 获取当前进程 id 并取得进程名
int pid = android.os.Process.myPid();
String processAppName = getAppName(pid);
/**
* 如果app启用了远程的service,此application:onCreate会被调用2次
* 为了防止环信SDK被初始化2次,加此判断会保证SDK被初始化1次
* 默认的app会在以包名为默认的process name下运行,如果查到的process
* name不是app的process name就立即返回
*/
if (processAppName == null || !processAppName.equalsIgnoreCase(mContext.getPackageName())) {
// 则此application的onCreate 是被service 调用的,直接返回
return;
}
if (sdkInited) {
return;
}
}
/**
* 根据Pid获取当前进程的名字,一般就是当前app的包名
*
* @param pid 进程的id
* @return 返回进程的名字
*/
private String getAppName(int pid) {
String processName = null;
ActivityManager activityManager = (ActivityManager) mContext.getSystemService(Context.ACTIVITY_SERVICE);
List list = activityManager.getRunningAppProcesses();
Iterator i = list.iterator();
while (i.hasNext()) {
ActivityManager.RunningAppProcessInfo info = (ActivityManager.RunningAppProcessInfo) (i.next());
try {
if (info.pid == pid) {
// 根据进程的信息获取当前进程的名字
processName = info.processName;
// 返回当前进程名
return processName;
}
} catch (Exception e) {
e.printStackTrace();
}
}
// 没有匹配的项,返回为null
return null;
}
}
......@@ -9,11 +9,10 @@
<ImageView
android:id="@+id/start_pager_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerHorizontal="true"
android:layout_marginTop="148dp"
android:background="@mipmap/logo"
android:background="@mipmap/bg_splash"
/>
<TextView
......@@ -26,5 +25,6 @@
android:text="@string/tv_start_page_text"
android:textColor="#8a8a8a"
android:textSize="@dimen/sp_1"
android:visibility="gone"
/>
</RelativeLayout>
File mode changed from 100755 to 100644
......@@ -498,7 +498,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/line_three"
android:visibility="visible"
android:visibility="gone"
>
<TextView
......
......@@ -117,7 +117,7 @@
<string name="no_permission">没有此权限将无法使用本app,请在设置中打开权限!</string>
<string name="login_state_no">登录状态已失效,请重新登录!</string>
<string name="login_again">重新登录</string>
<string name="please_open__permission">请您打开权限再使用\n设置路径:设置->应用->大鱼师傅->权限</string>
<string name="please_open__permission">没有此权限</string>
<string name="cancle">取消</string>
<string name="go_setting">前往设置</string>
<string name="login_agreement">登录即表示同意此</string>
......
......@@ -8,6 +8,14 @@
<item name="colorAccent">@color/cl_accent</item>
</style>
<style name="SplashTheme" parent="AppTheme">
<item name="android:windowBackground">@mipmap/bg_splash</item>
<item name="android:windowFullscreen">true</item>
<item name="android:windowNoTitle">true</item>
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>
<style name="Transparent" parent="AppTheme">
<item name="android:windowIsTranslucent">true</item>
</style>
......
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 sign in to comment