// }
}
dependencies {
- compileOnly files ('libs/frameworks-full-debug.jar')
- provided files ('libs/telephony_common-full-debug.jar')
+ compileOnly files('libs/frameworks-full-debug.jar')
+ provided files('libs/telephony_common-full-debug.jar')
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
//compile fileTree(include: ['*.jar', '*.aar'], dir: 'libs')
})
implementation 'com.android.support:appcompat-v7:25.1.0'
implementation 'com.github.ChestnutPlus:TestModules:v1.0.16'
- testCompile 'junit:junit:4.12'
+ testImplementation 'junit:junit:4.12'
implementation project(path: ':dNSCache')
implementation 'com.android.support:recyclerview-v7:25.1.0'
- compile files ('libs/android-logging-log4j-1.0.3.jar','libs/ftp4j-1.7.2.jar','libs/log4j-1.2.17.jar','libs/okio-2.4.3.jar' )
- compile files ('libs/mail.jar' )
- compile files ('libs/activation.jar','libs/additionnal.jar' )
+ implementation files('libs/android-logging-log4j-1.0.3.jar', 'libs/ftp4j-1.7.2.jar', 'libs/log4j-1.2.17.jar', 'libs/okio-2.4.3.jar')
+ implementation files('libs/mail.jar')
+ implementation files('libs/activation.jar', 'libs/additionnal.jar')
implementation 'se.wetcat.qatja:core:1.0.4'
// implementation "androidx.recyclerview:recyclerview:1.1.0
return new Date().format("yyMMddHHmm", TimeZone.getTimeZone("GMT+08:00"))
}
+
preBuild {
doLast {
- def imlFile = file( project.name + ".iml")
+ def imlFile = file(project.name + ".iml")
println 'Change ' + project.name + '.iml order'
try {
def parsedXml = (new XmlParser()).parse(imlFile)
-[{"outputType":{"type":"APK"},"apkData":{"type":"MAIN","splits":[],"versionCode":516,"versionName":"2009051621","enabled":true,"outputFile":"ICSer_V516_2009051621_release.apk","fullName":"release","baseName":"release"},"path":"ICSer_V516_2009051621_release.apk","properties":{}}]
\ No newline at end of file
+[{"outputType":{"type":"APK"},"apkData":{"type":"MAIN","splits":[],"versionCode":517,"versionName":"2012101455","enabled":true,"outputFile":"ICSer_V517_2012101455_release.apk","fullName":"release","baseName":"release"},"path":"ICSer_V517_2012101455_release.apk","properties":{}}]
\ No newline at end of file
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:supportsRtl="true"
- android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
- >
- <activity android:name=".toolActivity"></activity>
- <activity android:name=".GPSActivity"></activity>
- <activity android:name=".DeviceInfoActivity"></activity>
+ android:theme="@android:style/Theme.NoTitleBar.Fullscreen">
+ <activity android:name=".toolActivity" />
+ <activity android:name=".GPSActivity" />
+ <activity android:name=".DeviceInfoActivity" />
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
+
<service android:name="se.wetcat.qatja.android.QatjaService"> <!-- MQTT协议通讯服务 -->
<intent-filter>
<action android:name="com.ic.mqtt.startsrv" />
<action android:name="com.enqualcomm.support.HEART_ALARM" />
<action android:name="com.enqualcomm.support.ANTI_ALARM" />
<action android:name="com.enqualcomm.support.TEMP_ALARM" />
- <action android:name="com.ic.action.CHECK_ANTIOFF_EVENT"/>
+ <action android:name="com.ic.action.CHECK_ANTIOFF_EVENT" />
</intent-filter>
</service>
<service android:name=".CoreService$InnerService" />
<action android:name="com.ic.action.playtime" />
<action android:name="com.enqualcomm.support.ACTION_RETRY_SERVER_CONNECT" />
<action android:name="com.enqualcomm.support.ACTION_CHECK_LOCATION_RESULT" />
- <action android:name= "com.ic.action.message_sent" />
- <action android:name= "com.ic.action.temp_result" />
- <action android:name= "com.ic.action.set_sit_range" />
+ <action android:name="com.ic.action.message_sent" />
+ <action android:name="com.ic.action.temp_result" />
+ <action android:name="com.ic.action.set_sit_range" />
<!-- <action android:name="com.eqc.heartrate.action.SILENT_START" /> -->
</intent-filter>
</receiver>
import com.enqualcomm.support.utils.ICLogger;\r
\r
public class BootCompleteReceiver extends BroadcastReceiver {\r
- public void onReceive(Context paramContext, Intent paramIntent) {\r
- ICLogger.i("监听到开机广播");\r
- paramContext.startService(new Intent(paramContext, com.enqualcomm.support.CoreService.class));\r
- }\r
+ public void onReceive(Context paramContext, Intent paramIntent) {\r
+ ICLogger.i("监听到开机广播");\r
+ paramContext.startService(new Intent(paramContext, CoreService.class));\r
+ }\r
}\r
\r
\r
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Color;
+import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
-import android.os.StatFs;
-import android.support.v7.app.AppCompatActivity;
-import android.os.Bundle;
-import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
-import chestnut.utils.RegexUtils;
-import rx.Observable;
-import rx.functions.Action1;
-
import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK;
public class MainActivity extends Activity {
TextView tv;
- private boolean showmessage=false;
+ private boolean showmessage = false;
private ScheduledThreadPoolExecutor timer;
- Handler handler=new Handler(new Handler.Callback() {
+ Handler handler = new Handler(new Handler.Callback() {
@Override
public boolean handleMessage(Message message) {
-
- StringBuilder sb=new StringBuilder();
+ StringBuilder sb = new StringBuilder();
try {
-
if (showmessage) {
- if (CoreService.getInstance()!=null)
+ if (CoreService.getInstance() != null)
sb.append(CoreService.getInstance().getServerAlive());
tv.setText(sb.toString());
}
- }catch(Exception e){
+ } catch (Exception e) {
e.printStackTrace();
}
return false;
}
});
+
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btnConnect = (Button) findViewById(R.id.btnConnect);
- tv = (TextView)findViewById(R.id.textView);
+ tv = (TextView) findViewById(R.id.textView);
btnConnect.setOnClickListener(clickListener);
- Button tbtn = (Button)findViewById(R.id.btn_tools);
+ Button tbtn = (Button) findViewById(R.id.btn_tools);
tbtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
- Intent intent=new Intent();
+ Intent intent = new Intent();
ComponentName var3 = new ComponentName("com.enqualcomm.support", "com.enqualcomm.support.toolActivity");
intent.addFlags(FLAG_ACTIVITY_NEW_TASK);
intent.setComponent(var3);
}
});
- // tesetSharedKey();
+ // tesetSharedKey();
// SimSignalUtil.send_at_to_onoff_simcard(CoreService.getInstance().runtime));
// ICLogger.i(" lat="+latitude+",lon="+longitude);
- TextView tv_version=(TextView)findViewById(R.id.textViewVersion);
- tv_version.setText(DeviceInfoUtil.getVersionCode(this)+"-"+DeviceInfoUtil.getVersionName(this));
+ TextView tv_version = (TextView) findViewById(R.id.textViewVersion);
+ tv_version.setText(DeviceInfoUtil.getVersionCode(this) + "-" + DeviceInfoUtil.getVersionName(this));
// testpic();
}
@Override
- protected void onResume() {
+ protected void onResume() {
super.onResume();
- timer=new ScheduledThreadPoolExecutor(10);
+ timer = new ScheduledThreadPoolExecutor(10);
timer.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
handler.sendEmptyMessage(0);
}
- }, 0, 2000,TimeUnit.MILLISECONDS);
- showmessage=true;
+ }, 0, 2000, TimeUnit.MILLISECONDS);
+ showmessage = true;
}
@Override
protected void onPause() {
super.onPause();
- if (timer!=null) {
+ if (timer != null) {
timer.shutdownNow();
// while(!timer.isTerminated())
// {
timer.purge();
timer = null;
}
- showmessage=false;
+ showmessage = false;
}
- public void testpic(){
+ public void testpic() {
- String str = null;
- try {
- if (Environment.getExternalStorageState().equals("mounted")) {
+ String str = null;
+ try {
+ if (Environment.getExternalStorageState().equals("mounted")) {
// if ((new StatFs(Environment.getExternalStorageDirectory().toString())).getAvailableBytes() < paramArrayOfByte.length)
- str = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).getAbsolutePath();
- StringBuilder stringBuilder = new StringBuilder();
- stringBuilder.append(str);
- stringBuilder.append("/TakePhoto_080835");
- stringBuilder.append(".jpg");
- str = stringBuilder.toString();
- Bitmap bitmap2 =BitmapFactory.decodeFile(str);
+ str = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).getAbsolutePath();
+ StringBuilder stringBuilder = new StringBuilder();
+ stringBuilder.append(str);
+ stringBuilder.append("/TakePhoto_080835");
+ stringBuilder.append(".jpg");
+ str = stringBuilder.toString();
+ Bitmap bitmap2 = BitmapFactory.decodeFile(str);
// Bitmap bitmap2 = BitmapFactory.decodeByteArray(paramArrayOfByte, 0, paramArrayOfByte.length);
// Bitmap bitmap1 = bitmap2;
- Bitmap bitmap3 = bitmap2;
- if ((this.getResources().getConfiguration()).orientation == 1) {
+ Bitmap bitmap3 = bitmap2;
+ if ((this.getResources().getConfiguration()).orientation == 1) {
// Matrix matrix = new Matrix();
// matrix.reset();
- // matrix.postRotate(this.mOrientation);
- // bitmap1 = Bitmap.createBitmap(bitmap2, 0, 0, bitmap2.getWidth(), bitmap2.getHeight(), matrix, true);
-
- }
- bitmap3 = ImageUtil.drawTextToLeftTop(this,bitmap2, TimeUtil.getSystemTime(),24, Color.RED, 20, 20);
- str = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).getAbsolutePath();
- stringBuilder = new StringBuilder();
- stringBuilder.append(str);
- stringBuilder.append("/TakePhoto_0808352");
- stringBuilder.append(".jpg");
- str = stringBuilder.toString();
- File file = new File(str);
- if (!file.exists())
- file.createNewFile();
- BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(new FileOutputStream(file));
- bitmap3.compress(Bitmap.CompressFormat.JPEG, 100, bufferedOutputStream);
- bufferedOutputStream.flush();
- bufferedOutputStream.close();
-
- ICLogger.i("Take Photo and Save to "+str);
+ // matrix.postRotate(this.mOrientation);
+ // bitmap1 = Bitmap.createBitmap(bitmap2, 0, 0, bitmap2.getWidth(), bitmap2.getHeight(), matrix, true);
+
}
+ bitmap3 = ImageUtil.drawTextToLeftTop(this, bitmap2, TimeUtil.getSystemTime(), 24, Color.RED, 20, 20);
+ str = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).getAbsolutePath();
+ stringBuilder = new StringBuilder();
+ stringBuilder.append(str);
+ stringBuilder.append("/TakePhoto_0808352");
+ stringBuilder.append(".jpg");
+ str = stringBuilder.toString();
+ File file = new File(str);
+ if (!file.exists())
+ file.createNewFile();
+ BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(new FileOutputStream(file));
+ bitmap3.compress(Bitmap.CompressFormat.JPEG, 100, bufferedOutputStream);
+ bufferedOutputStream.flush();
+ bufferedOutputStream.close();
+
+ ICLogger.i("Take Photo and Save to " + str);
+ }
- } catch (Exception e) {
- e.printStackTrace();
+ } catch (Exception e) {
+ e.printStackTrace();
- }
+ }
}
switch (view.getId()) {
case R.id.btnConnect:
//进行连接Socket:这里使用的是,在本地上开启了一个服务器。
- if (CoreService.getInstance()!=null)
- Util.ShowToast(CoreService.getInstance().runtime,"Start ProtocolService!");
- startService(new Intent(MainActivity.this,CoreService.class));// protocol service
+ if (CoreService.getInstance() != null)
+ Util.ShowToast(CoreService.getInstance().runtime, "Start ProtocolService!");
+ startService(new Intent(MainActivity.this, CoreService.class));// protocol service
// Observable.timer(5000L, TimeUnit.MILLISECONDS).subscribe(new Action1<Long>() {
//
};
- public void tesetSharedKey(){
- Config.setSleepScore(this,344);
- Config.setSleepDate(this,TimeUtil.getSystemTime3());
- Config.setKeepSitRangeInMinutes(this,3);
- ICLogger.d("SHAREKEY_SETTING_SLEEP_SCORE_DATE "+ SharPreferenceUtil.getPrefStringPublic(this,Constants.SHAREKEY_SETTING_SLEEP_SCORE_DATE,""));
- ICLogger.d("SHAREKEY_SETTING_SLEEP_SCORE "+ SharPreferenceUtil.getPrefIntPublic(this,Constants.SHAREKEY_SETTING_SLEEP_SCORE,0));
- ICLogger.d("SHAREKEY_SETTING_SIT_ALARM_RANGE_IN_MINUTES "+ SharPreferenceUtil.getPrefIntPublic(this,Constants.SHAREKEY_SETTING_SIT_ALARM_RANGE_IN_MINUTES,0));
+ public void tesetSharedKey() {
+ Config.setSleepScore(this, 344);
+ Config.setSleepDate(this, TimeUtil.getSystemTime3());
+ Config.setKeepSitRangeInMinutes(this, 3);
+ ICLogger.d("SHAREKEY_SETTING_SLEEP_SCORE_DATE " + SharPreferenceUtil.getPrefStringPublic(this, Constants.SHAREKEY_SETTING_SLEEP_SCORE_DATE, ""));
+ ICLogger.d("SHAREKEY_SETTING_SLEEP_SCORE " + SharPreferenceUtil.getPrefIntPublic(this, Constants.SHAREKEY_SETTING_SLEEP_SCORE, 0));
+ ICLogger.d("SHAREKEY_SETTING_SIT_ALARM_RANGE_IN_MINUTES " + SharPreferenceUtil.getPrefIntPublic(this, Constants.SHAREKEY_SETTING_SIT_ALARM_RANGE_IN_MINUTES, 0));
}
}
import android.os.Message;\r
import android.os.Messenger;\r
import android.telephony.PhoneStateListener;\r
-import android.telephony.PreciseCallState;\r
import android.telephony.TelephonyManager;\r
\r
import com.enqualcomm.support.Config;\r
import com.enqualcomm.support.CoreService;\r
import com.enqualcomm.support.ICContentProvider;\r
-import com.enqualcomm.support.MainActivity;\r
import com.enqualcomm.support.bean.Alarm;\r
import com.enqualcomm.support.bean.Antioff;\r
import com.enqualcomm.support.bean.NoticeContent;\r
import com.enqualcomm.support.bean.Runtime;\r
import com.enqualcomm.support.bean.Silent;\r
import com.enqualcomm.support.bean.StheartRate;\r
-\r
import com.enqualcomm.support.service.base.AbstractInvokeHandlerService;\r
import com.enqualcomm.support.utils.AlarmHelper;\r
import com.enqualcomm.support.utils.Connection;\r
import com.enqualcomm.support.utils.MissedCallContentObserver;\r
import com.enqualcomm.support.utils.SharPreferenceUtil;\r
import com.enqualcomm.support.utils.TimeUtil;\r
-import com.enqualcomm.support.utils.Util;\r
\r
import java.util.ArrayList;\r
import java.util.Calendar;\r
import rx.Observable;\r
import rx.functions.Action1;\r
\r
-import static android.telephony.TelephonyManager.ACTION_PHONE_STATE_CHANGED;\r
import static android.telephony.TelephonyManager.CALL_STATE_OFFHOOK;\r
import static android.telephony.TelephonyManager.CALL_STATE_RINGING;\r
import static com.enqualcomm.support.Constants.ACTION_CARE_ALARM;\r
import static com.enqualcomm.support.Constants.ACTION_CLOSE_UNREAD_MSG;\r
-import static com.enqualcomm.support.Constants.ACTION_HEATR_RATE_START;\r
import static com.enqualcomm.support.Constants.SERVICE_CLS_NAME;\r
import static com.enqualcomm.support.Constants.SERVICE_PKG_NAME;\r
\r
public class SilentManager extends AbstractInvokeHandlerService {\r
- private static final long ONE_WEEK = 604800000L;\r
- private static final long ONE_DAY = 86400000L;\r
-\r
- private ArrayList<Alarm> alarms;\r
- private boolean haveHandSilence;\r
- private boolean isCalling;\r
- AlarmManager mAlarmManager;\r
- private SilentManager.AlramReceiver mAlramReceiver;\r
- Connection mConnection;\r
- ContentObserver mContentObserver = new ContentObserver(new Handler()) {\r
- public void onChange(boolean var1) {\r
- ICLogger.i("静默有变化");\r
- SilentManager.this.silentList = SilentManager.this.querySilent();\r
- SilentManager.this.getSilentListStartAndEndTime();\r
- SilentManager.this.handleSilent(mRuntime, true);\r
+ private static final long ONE_WEEK = 604800000L;\r
+ private static final long ONE_DAY = 86400000L;\r
+\r
+ private ArrayList<Alarm> alarms;\r
+ private boolean haveHandSilence;\r
+ private boolean isCalling;\r
+ AlarmManager mAlarmManager;\r
+ private SilentManager.AlramReceiver mAlramReceiver;\r
+ Connection mConnection;\r
+ ContentObserver mContentObserver = new ContentObserver(new Handler()) {\r
+ public void onChange(boolean var1) {\r
+ ICLogger.i("静默有变化");\r
+ SilentManager.this.silentList = SilentManager.this.querySilent();\r
+ SilentManager.this.getSilentListStartAndEndTime();\r
+ SilentManager.this.handleSilent(mRuntime, true);\r
+ }\r
+ };\r
+ private Context mContext;\r
+ private DBHelper mDbHelper;\r
+ private boolean mInSilent;\r
+ private String mInterval;\r
+ private boolean mIsNeedAntioff;\r
+ private boolean mIsStheartRate;\r
+ private MissedCallContentObserver mMissedCallContentObserver;\r
+ Runtime mRuntime;\r
+ private int mStheartRateInterval;\r
+ private int mTodayWeek;\r
+ private boolean mValue_isSilence;\r
+\r
+ public static final int PRECISE_CALL_STATE_NOT_VALID = -1;\r
+ public static final int PRECISE_CALL_STATE_IDLE = 0; //空闲\r
+ public static final int PRECISE_CALL_STATE_ACTIVE = 1; //正在通话\r
+ public static final int PRECISE_CALL_STATE_HOLDING = 2; //通话挂起\r
+ public static final int PRECISE_CALL_STATE_DIALING = 3; //拨号开始\r
+ public static final int PRECISE_CALL_STATE_ALERTING = 4; //正在呼出\r
+ public static final int PRECISE_CALL_STATE_INCOMING = 5; //对方来电\r
+ public static final int PRECISE_CALL_STATE_WAITING = 6; //第三方来电等待\r
+ public static final int PRECISE_CALL_STATE_DISCONNECTED = 7; //挂断完成\r
+ public static final int PRECISE_CALL_STATE_DISCONNECTING = 8; //正在挂断\r
+\r
+ private static SilentManager mSilentManger = null;\r
+\r
+ public static SilentManager getInstance() {\r
+ if (mSilentManger == null)\r
+ mSilentManger = new SilentManager();\r
+ return mSilentManger;\r
}\r
- };\r
- private Context mContext;\r
- private DBHelper mDbHelper;\r
- private boolean mInSilent;\r
- private String mInterval;\r
- private boolean mIsNeedAntioff;\r
- private boolean mIsStheartRate;\r
- private MissedCallContentObserver mMissedCallContentObserver;\r
- Runtime mRuntime;\r
- private int mStheartRateInterval;\r
- private int mTodayWeek;\r
- private boolean mValue_isSilence;\r
-\r
- public static final int PRECISE_CALL_STATE_NOT_VALID = -1;\r
- public static final int PRECISE_CALL_STATE_IDLE = 0; //空闲\r
- public static final int PRECISE_CALL_STATE_ACTIVE = 1; //正在通话\r
- public static final int PRECISE_CALL_STATE_HOLDING = 2; //通话挂起\r
- public static final int PRECISE_CALL_STATE_DIALING = 3; //拨号开始\r
- public static final int PRECISE_CALL_STATE_ALERTING = 4; //正在呼出\r
- public static final int PRECISE_CALL_STATE_INCOMING = 5; //对方来电\r
- public static final int PRECISE_CALL_STATE_WAITING = 6; //第三方来电等待\r
- public static final int PRECISE_CALL_STATE_DISCONNECTED = 7; //挂断完成\r
- public static final int PRECISE_CALL_STATE_DISCONNECTING = 8; //正在挂断\r
-\r
- private static SilentManager mSilentManger=null;\r
-\r
- public static SilentManager getInstance(){\r
- if (mSilentManger==null)\r
- mSilentManger=new SilentManager();\r
- return mSilentManger;\r
- }\r
- private PhoneStateListener phoneStateListener = new PhoneStateListener() {\r
- public void onCallStateChanged(int state, String incomingNumber) {\r
- super.onCallStateChanged(state, incomingNumber);\r
-\r
- ICLogger.i("========onCallStateChanged state "+state+", incomingNumber "+incomingNumber);\r
- switch(state) {\r
- case PRECISE_CALL_STATE_DISCONNECTING: //挂电话\r
- case PRECISE_CALL_STATE_DISCONNECTED: //挂电话\r
- isCalling = false;\r
+\r
+ private PhoneStateListener phoneStateListener = new PhoneStateListener() {\r
+ public void onCallStateChanged(int state, String incomingNumber) {\r
+ super.onCallStateChanged(state, incomingNumber);\r
+\r
+ ICLogger.i("========onCallStateChanged state " + state + ", incomingNumber " + incomingNumber);\r
+ switch (state) {\r
+ case PRECISE_CALL_STATE_DISCONNECTING: //挂电话\r
+ case PRECISE_CALL_STATE_DISCONNECTED: //挂电话\r
+ isCalling = false;\r
// if (SilentManager.this.haveHandSilence) {\r
// SilentManager.this.handSilence(SilentManager.this.mContext, SilentManager.this.mValue_isSilence);\r
// }\r
- if(ICAudioManager.needMute==true)\r
- {\r
+ if (ICAudioManager.needMute == true) {\r
// ICAudioManager.restoreVolumn(mContext); //2秒后恢复音量\r
- Observable.timer(2000L, TimeUnit.MILLISECONDS).subscribe(new Action1<Long>() {\r
- public void call(Long param1Long) {\r
- ICAudioManager.restoreVolumn(mContext); //2秒后恢复音量\r
- ICAudioManager.needMute=false;\r
- }\r
- });\r
-\r
- }\r
- ICLogger.i("========Hung up!");\r
- break;\r
- case PRECISE_CALL_STATE_INCOMING: //来电\r
- case PRECISE_CALL_STATE_ALERTING:\r
- case PRECISE_CALL_STATE_DIALING:\r
- isCalling = true;\r
- Intent var3 = new Intent();\r
- var3.setAction(ACTION_CLOSE_UNREAD_MSG);\r
- mContext.sendBroadcast(var3);\r
-\r
- ICLogger.i("========Ring!");\r
- if(ICAudioManager.needMute==true)\r
- {\r
- ICAudioManager.setVolumnMute(mContext);\r
- Observable.timer(2000L, TimeUnit.MILLISECONDS).subscribe(new Action1<Long>() {\r
- public void call(Long param1Long) {\r
- ICAudioManager.setVolumnMute(mContext); //2秒后恢复音量\r
- }\r
- });\r
-\r
- }\r
- break;\r
- case PRECISE_CALL_STATE_ACTIVE://接电话\r
- {\r
- if (ICAudioManager.needMute == false){\r
- if (Config.custom_branch_name.equals("AK"))\r
- ICAudioManager.setVoiceCallMaxVolumn(mContext); //设置最大音量\r
- }\r
+ Observable.timer(2000L, TimeUnit.MILLISECONDS).subscribe(new Action1<Long>() {\r
+ public void call(Long param1Long) {\r
+ ICAudioManager.restoreVolumn(mContext); //2秒后恢复音量\r
+ ICAudioManager.needMute = false;\r
+ }\r
+ });\r
+\r
+ }\r
+ ICLogger.i("========Hung up!");\r
+ break;\r
+ case PRECISE_CALL_STATE_INCOMING: //来电\r
+ case PRECISE_CALL_STATE_ALERTING:\r
+ case PRECISE_CALL_STATE_DIALING:\r
+ isCalling = true;\r
+ Intent var3 = new Intent();\r
+ var3.setAction(ACTION_CLOSE_UNREAD_MSG);\r
+ mContext.sendBroadcast(var3);\r
+\r
+ ICLogger.i("========Ring!");\r
+ if (ICAudioManager.needMute == true) {\r
+ ICAudioManager.setVolumnMute(mContext);\r
+ Observable.timer(2000L, TimeUnit.MILLISECONDS).subscribe(new Action1<Long>() {\r
+ public void call(Long param1Long) {\r
+ ICAudioManager.setVolumnMute(mContext); //2秒后恢复音量\r
+ }\r
+ });\r
+\r
+ }\r
+ break;\r
+ case PRECISE_CALL_STATE_ACTIVE://接电话\r
+ {\r
+ if (ICAudioManager.needMute == false) {\r
+ if (Config.custom_branch_name.equals("AK"))\r
+ ICAudioManager.setVoiceCallMaxVolumn(mContext); //设置最大音量\r
+ }\r
+ }\r
+ case PRECISE_CALL_STATE_HOLDING://接电话\r
+ case PRECISE_CALL_STATE_WAITING:\r
+ isCalling = true;\r
+ ICLogger.i("========Answer Call !");\r
+ if (ICAudioManager.needMute == true) {\r
+ ICAudioManager.setVolumnMute(mContext);\r
+ Observable.timer(2000L, TimeUnit.MILLISECONDS).subscribe(new Action1<Long>() {\r
+ public void call(Long param1Long) {\r
+ ICAudioManager.setVolumnMute(mContext); //2秒后恢复音量\r
+ }\r
+ });\r
+ }\r
+\r
+ }\r
+\r
}\r
- case PRECISE_CALL_STATE_HOLDING://接电话\r
- case PRECISE_CALL_STATE_WAITING:\r
- isCalling = true;\r
- ICLogger.i("========Answer Call !");\r
- if(ICAudioManager.needMute==true)\r
- {\r
- ICAudioManager.setVolumnMute(mContext);\r
- Observable.timer(2000L, TimeUnit.MILLISECONDS).subscribe(new Action1<Long>() {\r
- public void call(Long param1Long) {\r
- ICAudioManager.setVolumnMute(mContext); //2秒后恢复音量\r
- }\r
- });\r
- }\r
-\r
- }\r
+ };\r
+ private ArrayList<Antioff> sAntioffList;\r
+ private ArrayList<Silent> silentList;\r
+ private ArrayList<StheartRate> stheartRateList;\r
+ private ArrayList<NoticeContent> voiceNotice;\r
\r
- }\r
- };\r
- private ArrayList<Antioff> sAntioffList;\r
- private ArrayList<Silent> silentList;\r
- private ArrayList<StheartRate> stheartRateList;\r
- private ArrayList<NoticeContent> voiceNotice;\r
-\r
- public SilentManager() {\r
- }\r
-\r
- private void callback(Messenger var1, boolean var2) {\r
- short var3;\r
- if (var2) {\r
- var3 = 600;\r
- } else {\r
- var3 = 700;\r
+ public SilentManager() {\r
}\r
\r
- if (var1 != null) {\r
- try {\r
- var1.send(Message.obtain((Handler)null, var3));\r
- } catch (Exception var4) {\r
- var4.printStackTrace();\r
- }\r
- }\r
+ private void callback(Messenger var1, boolean var2) {\r
+ short var3;\r
+ if (var2) {\r
+ var3 = 600;\r
+ } else {\r
+ var3 = 700;\r
+ }\r
\r
- }\r
+ if (var1 != null) {\r
+ try {\r
+ var1.send(Message.obtain((Handler) null, var3));\r
+ } catch (Exception var4) {\r
+ var4.printStackTrace();\r
+ }\r
+ }\r
\r
- private void cancelAlarm(ArrayList<Alarm> var1) {\r
- Iterator var2 = var1.iterator();\r
+ }\r
\r
- while(var2.hasNext()) {\r
- Alarm var3 = (Alarm)var2.next();\r
- String var10 = var3.time;\r
- String var4 = var3.week;\r
- String var5 = var3.ring;\r
- String var11 = var3.name;\r
- char[] var6 = var4.toCharArray();\r
- int var7 = var6.length;\r
+ private void cancelAlarm(ArrayList<Alarm> var1) {\r
+ Iterator var2 = var1.iterator();\r
+\r
+ while (var2.hasNext()) {\r
+ Alarm var3 = (Alarm) var2.next();\r
+ String var10 = var3.time;\r
+ String var4 = var3.week;\r
+ String var5 = var3.ring;\r
+ String var11 = var3.name;\r
+ char[] var6 = var4.toCharArray();\r
+ int var7 = var6.length;\r
+\r
+ for (int var8 = 1; var8 < var7; ++var8) {\r
+ char var9 = var6[var8];\r
+ this.mAlarmManager.cancel(this.getPendingIntent(var10, var4, var5, var11, var9 - 47));\r
+ }\r
+ }\r
\r
- for(int var8 = 1; var8 < var7; ++var8) {\r
- char var9 = var6[var8];\r
- this.mAlarmManager.cancel(this.getPendingIntent(var10, var4, var5, var11, var9 - 47));\r
- }\r
}\r
\r
- }\r
-\r
- private void cancelNoticeAlarm(ArrayList<NoticeContent> var1) {\r
- Iterator var2 = var1.iterator();\r
-\r
- while(var2.hasNext()) {\r
- NoticeContent var3 = (NoticeContent)var2.next();\r
- String var4 = var3.noticeTime;\r
- String var9 = var3.noticeName;\r
- String var5 = var3.noticeNumber;\r
- String var6 = var3.noticeID;\r
- String var7 = var3.noticeCategory;\r
- String var8 = var3.noticeFrequency;\r
- String var10 = var3.noticeContent;\r
- this.mAlarmManager.cancel(this.getPendingIntent(var4, var9, var5, var6, var7, var8, var10));\r
- }\r
+ private void cancelNoticeAlarm(ArrayList<NoticeContent> var1) {\r
+ Iterator var2 = var1.iterator();\r
+\r
+ while (var2.hasNext()) {\r
+ NoticeContent var3 = (NoticeContent) var2.next();\r
+ String var4 = var3.noticeTime;\r
+ String var9 = var3.noticeName;\r
+ String var5 = var3.noticeNumber;\r
+ String var6 = var3.noticeID;\r
+ String var7 = var3.noticeCategory;\r
+ String var8 = var3.noticeFrequency;\r
+ String var10 = var3.noticeContent;\r
+ this.mAlarmManager.cancel(this.getPendingIntent(var4, var9, var5, var6, var7, var8, var10));\r
+ }\r
\r
- }\r
-\r
- private PendingIntent getPendingIntent(String var1, String var2, String var3, String var4, int var5) {\r
- StringBuilder var6 = new StringBuilder("alarm:");\r
- var6.append(var1);\r
- var6.append(",");\r
- var6.append(var2);\r
- var6.append(",");\r
- var6.append(var3);\r
- var6.append(",");\r
- var6.append(var4);\r
- var6.append(",");\r
- var6.append(var5);\r
- var2 = var6.toString();\r
- Intent var7 = new Intent(this.mContext, CoreService.class);\r
- var7.setAction(ACTION_CARE_ALARM);\r
- var7.setData(Uri.parse(var2));\r
- return PendingIntent.getService(this.mContext, 0, var7, PendingIntent.FLAG_UPDATE_CURRENT);\r
- }\r
-\r
- private PendingIntent getPendingIntent(String var1, String var2, String var3, String var4, String var5, String var6, String var7) {\r
- StringBuilder var8 = new StringBuilder("notice:");\r
- var8.append(var1);\r
- var8.append(",");\r
- var8.append(var2);\r
- var8.append(",");\r
- var8.append(var3);\r
- var8.append(",");\r
- var8.append(var4);\r
- var8.append(",");\r
- var8.append(var5);\r
- var8.append(",");\r
- var8.append(var6);\r
- var8.append(",");\r
- var8.append(var7);\r
- var1 = var8.toString();\r
- Intent var9 = new Intent(this.mContext, CoreService.class);\r
- var9.setAction("com.enqualcomm.support.ACTION_NOTICE_ALARM");\r
- var9.setData(Uri.parse(var1));\r
- return PendingIntent.getService(this.mContext, 0, var9, PendingIntent.FLAG_UPDATE_CURRENT);\r
- }\r
-\r
- private void getSilentListStartAndEndTime() {\r
- Calendar var1 = Calendar.getInstance();\r
- this.mTodayWeek = var1.get(Calendar.DAY_OF_WEEK);\r
-\r
- Silent var3;\r
- for(Iterator var2 = this.silentList.iterator(); var2.hasNext(); var3.endTimeMillis = var1.getTimeInMillis()) {\r
- var3 = (Silent)var2.next();\r
- var1.set(Calendar.SECOND, 0);\r
- int var4 = Integer.parseInt(var3.start.substring(2, 4));\r
- int var5 = Integer.parseInt(var3.start.substring(5, 7));\r
- var1.set(Calendar.HOUR_OF_DAY, var4);\r
- var1.set(Calendar.MINUTE, var5);\r
- var3.startTimeMillis = var1.getTimeInMillis();\r
- var5 = Integer.parseInt(var3.end.substring(2, 4));\r
- var4 = Integer.parseInt(var3.end.substring(5, 7));\r
- var1.set(Calendar.HOUR_OF_DAY, var5);\r
- var1.set(Calendar.MINUTE, var4);\r
}\r
\r
- }\r
-\r
- private void getStartAndEndSantioffTime() {\r
- Calendar var1 = Calendar.getInstance();\r
- this.mTodayWeek = var1.get(Calendar.DAY_OF_WEEK);\r
-\r
- Antioff var3;\r
- for(Iterator var2 = this.sAntioffList.iterator(); var2.hasNext(); var3.endTimeMillis = var1.getTimeInMillis()) {\r
- var3 = (Antioff)var2.next();\r
- var1.set(Calendar.SECOND, 0);\r
- int var4 = Integer.parseInt(var3.start.substring(2, 4));\r
- int var5 = Integer.parseInt(var3.start.substring(5, 7));\r
- var1.set(Calendar.HOUR_OF_DAY, var4);\r
- var1.set(Calendar.MINUTE, var5);\r
- var3.startTimeMillis = var1.getTimeInMillis();\r
- var4 = Integer.parseInt(var3.end.substring(2, 4));\r
- var5 = Integer.parseInt(var3.end.substring(5, 7));\r
- var1.set(Calendar.HOUR_OF_DAY, var4);\r
- var1.set(Calendar.MINUTE, var5);\r
+ private PendingIntent getPendingIntent(String var1, String var2, String var3, String var4, int var5) {\r
+ StringBuilder var6 = new StringBuilder("alarm:");\r
+ var6.append(var1);\r
+ var6.append(",");\r
+ var6.append(var2);\r
+ var6.append(",");\r
+ var6.append(var3);\r
+ var6.append(",");\r
+ var6.append(var4);\r
+ var6.append(",");\r
+ var6.append(var5);\r
+ var2 = var6.toString();\r
+ Intent var7 = new Intent(this.mContext, CoreService.class);\r
+ var7.setAction(ACTION_CARE_ALARM);\r
+ var7.setData(Uri.parse(var2));\r
+ return PendingIntent.getService(this.mContext, 0, var7, PendingIntent.FLAG_UPDATE_CURRENT);\r
}\r
\r
- }\r
-\r
- private void getStartAndEndStheartRateTime() {\r
- Calendar var1 = Calendar.getInstance();\r
- this.mTodayWeek = var1.get(Calendar.DAY_OF_WEEK);\r
-\r
- StheartRate var3;\r
- for(Iterator var2 = this.stheartRateList.iterator(); var2.hasNext(); var3.endTimeMillis = var1.getTimeInMillis()) {\r
- var3 = (StheartRate)var2.next();\r
- var1.set(Calendar.SECOND, 0);\r
- int var4 = Integer.parseInt(var3.start.substring(2, 4));\r
- int var5 = Integer.parseInt(var3.start.substring(5, 7));\r
- var1.set(Calendar.HOUR_OF_DAY, var4);\r
- var1.set(Calendar.MINUTE, var5);\r
- var3.startTimeMillis = var1.getTimeInMillis();\r
- var4 = Integer.parseInt(var3.end.substring(2, 4));\r
- var5 = Integer.parseInt(var3.end.substring(5, 7));\r
- var1.set(Calendar.HOUR_OF_DAY, var4);\r
- var1.set(Calendar.MINUTE, var5);\r
+ private PendingIntent getPendingIntent(String var1, String var2, String var3, String var4, String var5, String var6, String var7) {\r
+ StringBuilder var8 = new StringBuilder("notice:");\r
+ var8.append(var1);\r
+ var8.append(",");\r
+ var8.append(var2);\r
+ var8.append(",");\r
+ var8.append(var3);\r
+ var8.append(",");\r
+ var8.append(var4);\r
+ var8.append(",");\r
+ var8.append(var5);\r
+ var8.append(",");\r
+ var8.append(var6);\r
+ var8.append(",");\r
+ var8.append(var7);\r
+ var1 = var8.toString();\r
+ Intent var9 = new Intent(this.mContext, CoreService.class);\r
+ var9.setAction("com.enqualcomm.support.ACTION_NOTICE_ALARM");\r
+ var9.setData(Uri.parse(var1));\r
+ return PendingIntent.getService(this.mContext, 0, var9, PendingIntent.FLAG_UPDATE_CURRENT);\r
}\r
\r
- }\r
-\r
- private void handSilence(Context var1, boolean var2) {\r
- this.mValue_isSilence = var2;\r
- if (this.isCalling) {\r
- this.haveHandSilence = true;\r
- } else {\r
- this.haveHandSilence = false;\r
- SharPreferenceUtil.setPrefBoolean(var1, "KEY_ISSILENCE", var2);\r
- Intent var3 = new Intent();\r
- var3.setAction("com.enqualcomm.support.ACTION_ISSILENCE2IMESSAGE");\r
- var3.putExtra("KEY_ISSILENCE", var2);\r
- var1.sendBroadcast(var3);\r
- ComponentName var4 = new ComponentName(SERVICE_PKG_NAME, SERVICE_CLS_NAME);\r
- Intent var5 = (new Intent("com.enqualcomm.support.ACTION_VIDEO_END_CALL")).setComponent(var4);\r
- this.mRuntime.getContextProxy().context.startService(var5);\r
- }\r
- }\r
+ private void getSilentListStartAndEndTime() {\r
+ Calendar var1 = Calendar.getInstance();\r
+ this.mTodayWeek = var1.get(Calendar.DAY_OF_WEEK);\r
+\r
+ Silent var3;\r
+ for (Iterator var2 = this.silentList.iterator(); var2.hasNext(); var3.endTimeMillis = var1.getTimeInMillis()) {\r
+ var3 = (Silent) var2.next();\r
+ var1.set(Calendar.SECOND, 0);\r
+ int var4 = Integer.parseInt(var3.start.substring(2, 4));\r
+ int var5 = Integer.parseInt(var3.start.substring(5, 7));\r
+ var1.set(Calendar.HOUR_OF_DAY, var4);\r
+ var1.set(Calendar.MINUTE, var5);\r
+ var3.startTimeMillis = var1.getTimeInMillis();\r
+ var5 = Integer.parseInt(var3.end.substring(2, 4));\r
+ var4 = Integer.parseInt(var3.end.substring(5, 7));\r
+ var1.set(Calendar.HOUR_OF_DAY, var5);\r
+ var1.set(Calendar.MINUTE, var4);\r
+ }\r
\r
- private void handleSilent(Runtime var1, boolean var2) {\r
- int var3 = Calendar.getInstance().get(Calendar.DAY_OF_WEEK);\r
- if (var3 != this.mTodayWeek && (var3 != 1 || this.mTodayWeek != 8)) {\r
- this.getSilentListStartAndEndTime();\r
- this.queryNotice();\r
}\r
\r
- boolean var4 = this.isSilentTime();\r
- StringBuilder var5 = new StringBuilder();\r
- var5.append("inSilent=");\r
- var5.append(var4);\r
- ICLogger.i(var5.toString());\r
- if (!this.mInSilent && var4) {\r
- this.onSilentStateChange(true);\r
- this.handSilence(this.mContext, true);\r
- this.mDbHelper.upDateStatus("ON");\r
- } else if (this.mInSilent && !var4) {\r
- this.onSilentStateChange(false);\r
- this.mDbHelper.upDateStatus("OFF");\r
- this.handSilence(this.mContext, false);\r
- }\r
+ private void getStartAndEndSantioffTime() {\r
+ Calendar var1 = Calendar.getInstance();\r
+ this.mTodayWeek = var1.get(Calendar.DAY_OF_WEEK);\r
+\r
+ Antioff var3;\r
+ for (Iterator var2 = this.sAntioffList.iterator(); var2.hasNext(); var3.endTimeMillis = var1.getTimeInMillis()) {\r
+ var3 = (Antioff) var2.next();\r
+ var1.set(Calendar.SECOND, 0);\r
+ int var4 = Integer.parseInt(var3.start.substring(2, 4));\r
+ int var5 = Integer.parseInt(var3.start.substring(5, 7));\r
+ var1.set(Calendar.HOUR_OF_DAY, var4);\r
+ var1.set(Calendar.MINUTE, var5);\r
+ var3.startTimeMillis = var1.getTimeInMillis();\r
+ var4 = Integer.parseInt(var3.end.substring(2, 4));\r
+ var5 = Integer.parseInt(var3.end.substring(5, 7));\r
+ var1.set(Calendar.HOUR_OF_DAY, var4);\r
+ var1.set(Calendar.MINUTE, var5);\r
+ }\r
\r
- this.mInSilent = var4;\r
- this.getStartAndEndStheartRateTime();\r
- this.isStheartRateTime(var2);\r
- }\r
-\r
- private boolean isIdle(Context context) {\r
- int callstate = ((TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE)).getCallState();\r
- boolean isidle;\r
- if (CALL_STATE_RINGING != callstate && CALL_STATE_OFFHOOK != callstate) {\r
- isidle = true;\r
- } else {\r
- isidle = false;\r
}\r
\r
- return isidle && !this.mInSilent && !this.mRuntime.getBatteryLow();\r
- }\r
+ private void getStartAndEndStheartRateTime() {\r
+ Calendar var1 = Calendar.getInstance();\r
+ this.mTodayWeek = var1.get(Calendar.DAY_OF_WEEK);\r
+\r
+ StheartRate var3;\r
+ for (Iterator var2 = this.stheartRateList.iterator(); var2.hasNext(); var3.endTimeMillis = var1.getTimeInMillis()) {\r
+ var3 = (StheartRate) var2.next();\r
+ var1.set(Calendar.SECOND, 0);\r
+ int var4 = Integer.parseInt(var3.start.substring(2, 4));\r
+ int var5 = Integer.parseInt(var3.start.substring(5, 7));\r
+ var1.set(Calendar.HOUR_OF_DAY, var4);\r
+ var1.set(Calendar.MINUTE, var5);\r
+ var3.startTimeMillis = var1.getTimeInMillis();\r
+ var4 = Integer.parseInt(var3.end.substring(2, 4));\r
+ var5 = Integer.parseInt(var3.end.substring(5, 7));\r
+ var1.set(Calendar.HOUR_OF_DAY, var4);\r
+ var1.set(Calendar.MINUTE, var5);\r
+ }\r
\r
- private boolean isAntioffTime(boolean var1) {\r
- long var2 = System.currentTimeMillis();\r
- ArrayList var4 = this.sAntioffList;\r
- int var5 = this.mTodayWeek;\r
- var1 = true;\r
- if (var5 == 1) {\r
- this.mTodayWeek += 7;\r
}\r
\r
- Iterator var12 = var4.iterator();\r
-\r
- while(true) {\r
- if (!var12.hasNext()) {\r
- var1 = false;\r
- break;\r
- }\r
-\r
- Antioff var6 = (Antioff)var12.next();\r
- String var7 = var6.week;\r
- StringBuilder var8 = new StringBuilder();\r
- var8.append(this.mTodayWeek - 1);\r
- var8.append("");\r
- if (var7.contains(var8.toString())) {\r
- long var9 = var6.startTimeMillis - var2;\r
- int var11;\r
- if (var9 < (long)(CoreService.alarmCycle * 60 * 1000) && var9 > 0L) {\r
- var11 = Integer.parseInt(var6.start.substring(2, 4));\r
- var5 = Integer.parseInt(var6.start.substring(5, 7));\r
- AlarmHelper.setTimeAlarm(this.mContext, var11, var5, "com.enqualcomm.support.OTHER_ALARM_START");\r
- var8 = new StringBuilder();\r
- var8.append("设置起始时间=hour");\r
- var8.append(var11);\r
- var8.append("minute+");\r
- var8.append(var5);\r
- ICLogger.i(var8.toString());\r
+ private void handSilence(Context var1, boolean var2) {\r
+ this.mValue_isSilence = var2;\r
+ if (this.isCalling) {\r
+ this.haveHandSilence = true;\r
+ } else {\r
+ this.haveHandSilence = false;\r
+ SharPreferenceUtil.setPrefBoolean(var1, "KEY_ISSILENCE", var2);\r
+ Intent var3 = new Intent();\r
+ var3.setAction("com.enqualcomm.support.ACTION_ISSILENCE2IMESSAGE");\r
+ var3.putExtra("KEY_ISSILENCE", var2);\r
+ var1.sendBroadcast(var3);\r
+ ComponentName var4 = new ComponentName(SERVICE_PKG_NAME, SERVICE_CLS_NAME);\r
+ Intent var5 = (new Intent("com.enqualcomm.support.ACTION_VIDEO_END_CALL")).setComponent(var4);\r
+ this.mRuntime.getContextProxy().context.startService(var5);\r
}\r
+ }\r
\r
- var9 = var6.endTimeMillis - var2;\r
- if (var9 < (long)(CoreService.alarmCycle * 60 * 1000) && var9 > 0L) {\r
- var11 = Integer.parseInt(var6.end.substring(2, 4));\r
- var5 = Integer.parseInt(var6.end.substring(5, 7));\r
- AlarmHelper.setTimeAlarm(this.mContext, var11, var5, "com.enqualcomm.support.OTHER_ALARM_END");\r
- var8 = new StringBuilder();\r
- var8.append("设置结束时间=hour");\r
- var8.append(var11);\r
- var8.append("minute+");\r
- var8.append(var5);\r
- ICLogger.i(var8.toString());\r
+ private void handleSilent(Runtime var1, boolean var2) {\r
+ int var3 = Calendar.getInstance().get(Calendar.DAY_OF_WEEK);\r
+ if (var3 != this.mTodayWeek && (var3 != 1 || this.mTodayWeek != 8)) {\r
+ this.getSilentListStartAndEndTime();\r
+ this.queryNotice();\r
}\r
\r
- if (var6.startTimeMillis <= var2 && var6.endTimeMillis > var2) {\r
- break;\r
+ boolean var4 = this.isSilentTime();\r
+ StringBuilder var5 = new StringBuilder();\r
+ var5.append("inSilent=");\r
+ var5.append(var4);\r
+ ICLogger.i(var5.toString());\r
+ if (!this.mInSilent && var4) {\r
+ this.onSilentStateChange(true);\r
+ this.handSilence(this.mContext, true);\r
+ this.mDbHelper.upDateStatus("ON");\r
+ } else if (this.mInSilent && !var4) {\r
+ this.onSilentStateChange(false);\r
+ this.mDbHelper.upDateStatus("OFF");\r
+ this.handSilence(this.mContext, false);\r
}\r
- }\r
- }\r
\r
- this.mRuntime.setAntioffStatus(var1);\r
- return var1;\r
- }\r
-\r
- private boolean isSilentTime() {\r
- long var1 = System.currentTimeMillis();\r
- ArrayList var3 = this.silentList;\r
- int var4 = this.mTodayWeek;\r
- boolean var5 = false; //默认不在silent时间段\r
- if (var4 == 1) {\r
- this.mTodayWeek += 7;\r
+ this.mInSilent = var4;\r
+ this.getStartAndEndStheartRateTime();\r
+ this.isStheartRateTime(var2);\r
}\r
\r
- Iterator var6 = var3.iterator();\r
-\r
- while(true) {\r
- if (!var6.hasNext()) {\r
- var5 = false;\r
- break;\r
- }\r
-\r
- Silent var12 = (Silent)var6.next();\r
- String var7 = var12.week;\r
- StringBuilder var8 = new StringBuilder();\r
- var8.append(this.mTodayWeek - 1);\r
- var8.append("");\r
- if (var7.contains(var8.toString())) {\r
- long var9 = var12.startTimeMillis - var1;\r
- int var11;\r
- StringBuilder var13;\r
- if (var9 < (long)(CoreService.alarmCycle * 60 * 1000) && var9 > 0L) {\r
- var11 = Integer.parseInt(var12.start.substring(2, 4));\r
- var4 = Integer.parseInt(var12.start.substring(5, 7));\r
- AlarmHelper.setTimeAlarm(this.mContext, var11, var4, "com.enqualcomm.support.OTHER_ALARM_START");\r
- var13 = new StringBuilder();\r
- var13.append("设置起始时间=hour");\r
- var13.append(var11);\r
- var13.append("minute+");\r
- var13.append(var4);\r
- ICLogger.i(var13.toString());\r
+ private boolean isIdle(Context context) {\r
+ int callstate = ((TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE)).getCallState();\r
+ boolean isidle;\r
+ if (CALL_STATE_RINGING != callstate && CALL_STATE_OFFHOOK != callstate) {\r
+ isidle = true;\r
+ } else {\r
+ isidle = false;\r
}\r
\r
- var9 = var12.endTimeMillis - var1;\r
- if (var9 < (long)(CoreService.alarmCycle * 60 * 1000) && var9 > 0L) {\r
- var11 = Integer.parseInt(var12.end.substring(2, 4));\r
- var4 = Integer.parseInt(var12.end.substring(5, 7));\r
- AlarmHelper.setTimeAlarm(this.mContext, var11, var4, "com.enqualcomm.support.OTHER_ALARM_END");\r
- var13 = new StringBuilder();\r
- var13.append("设置结束时间=hour");\r
- var13.append(var11);\r
- var13.append("minute+");\r
- var13.append(var4);\r
- ICLogger.i(var13.toString());\r
- }\r
+ return isidle && !this.mInSilent && !this.mRuntime.getBatteryLow();\r
+ }\r
\r
- if (var12.startTimeMillis <= var1 && var12.endTimeMillis > var1) {\r
- break;\r
+ private boolean isAntioffTime(boolean var1) {\r
+ long var2 = System.currentTimeMillis();\r
+ ArrayList var4 = this.sAntioffList;\r
+ int var5 = this.mTodayWeek;\r
+ var1 = true;\r
+ if (var5 == 1) {\r
+ this.mTodayWeek += 7;\r
}\r
- }\r
- }\r
\r
- return var5;\r
- }\r
+ Iterator var12 = var4.iterator();\r
\r
- private boolean isStheartRateTime(boolean var1) {\r
- long var2 = System.currentTimeMillis();\r
- ArrayList var4 = this.stheartRateList;\r
- if (this.mTodayWeek == 1) {\r
- this.mTodayWeek += 7;\r
- }\r
+ while (true) {\r
+ if (!var12.hasNext()) {\r
+ var1 = false;\r
+ break;\r
+ }\r
\r
- Iterator var12 = var4.iterator();\r
-\r
- while(true) {\r
- if (var12.hasNext()) {\r
- StheartRate var5 = (StheartRate)var12.next();\r
- String var6 = var5.week;\r
- StringBuilder var7 = new StringBuilder();\r
- var7.append(this.mTodayWeek - 1);\r
- var7.append("");\r
- if (!var6.contains(var7.toString())) {\r
- continue;\r
+ Antioff var6 = (Antioff) var12.next();\r
+ String var7 = var6.week;\r
+ StringBuilder var8 = new StringBuilder();\r
+ var8.append(this.mTodayWeek - 1);\r
+ var8.append("");\r
+ if (var7.contains(var8.toString())) {\r
+ long var9 = var6.startTimeMillis - var2;\r
+ int var11;\r
+ if (var9 < (long) (CoreService.alarmCycle * 60 * 1000) && var9 > 0L) {\r
+ var11 = Integer.parseInt(var6.start.substring(2, 4));\r
+ var5 = Integer.parseInt(var6.start.substring(5, 7));\r
+ AlarmHelper.setTimeAlarm(this.mContext, var11, var5, "com.enqualcomm.support.OTHER_ALARM_START");\r
+ var8 = new StringBuilder();\r
+ var8.append("设置起始时间=hour");\r
+ var8.append(var11);\r
+ var8.append("minute+");\r
+ var8.append(var5);\r
+ ICLogger.i(var8.toString());\r
+ }\r
+\r
+ var9 = var6.endTimeMillis - var2;\r
+ if (var9 < (long) (CoreService.alarmCycle * 60 * 1000) && var9 > 0L) {\r
+ var11 = Integer.parseInt(var6.end.substring(2, 4));\r
+ var5 = Integer.parseInt(var6.end.substring(5, 7));\r
+ AlarmHelper.setTimeAlarm(this.mContext, var11, var5, "com.enqualcomm.support.OTHER_ALARM_END");\r
+ var8 = new StringBuilder();\r
+ var8.append("设置结束时间=hour");\r
+ var8.append(var11);\r
+ var8.append("minute+");\r
+ var8.append(var5);\r
+ ICLogger.i(var8.toString());\r
+ }\r
+\r
+ if (var6.startTimeMillis <= var2 && var6.endTimeMillis > var2) {\r
+ break;\r
+ }\r
+ }\r
}\r
\r
- long var8 = var5.startTimeMillis - var2;\r
- int var10;\r
- int var11;\r
- if (var8 < (long)(CoreService.alarmCycle * 60 * 1000) && var8 > 0L) {\r
- var10 = Integer.parseInt(var5.start.substring(2, 4));\r
- var11 = Integer.parseInt(var5.start.substring(5, 7));\r
- AlarmHelper.setTimeAlarm(this.mContext, var10, var11, "com.enqualcomm.support.OTHER_HEARTRATE_ALARM_START");\r
+ this.mRuntime.setAntioffStatus(var1);\r
+ return var1;\r
+ }\r
+\r
+ private boolean isSilentTime() {\r
+ long var1 = System.currentTimeMillis();\r
+ ArrayList var3 = this.silentList;\r
+ int var4 = this.mTodayWeek;\r
+ boolean var5 = false; //默认不在silent时间段\r
+ if (var4 == 1) {\r
+ this.mTodayWeek += 7;\r
}\r
\r
- var8 = var5.endTimeMillis - var2;\r
- if (var8 < (long)(CoreService.alarmCycle * 60 * 1000) && var8 > 0L) {\r
- var10 = Integer.parseInt(var5.end.substring(2, 4));\r
- var11 = Integer.parseInt(var5.end.substring(5, 7));\r
- AlarmHelper.setTimeAlarm(this.mContext, var10, var11, "com.enqualcomm.support.OTHER_HEARTRATE_ALARM_END");\r
+ Iterator var6 = var3.iterator();\r
+\r
+ while (true) {\r
+ if (!var6.hasNext()) {\r
+ var5 = false;\r
+ break;\r
+ }\r
+\r
+ Silent var12 = (Silent) var6.next();\r
+ String var7 = var12.week;\r
+ StringBuilder var8 = new StringBuilder();\r
+ var8.append(this.mTodayWeek - 1);\r
+ var8.append("");\r
+ if (var7.contains(var8.toString())) {\r
+ long var9 = var12.startTimeMillis - var1;\r
+ int var11;\r
+ StringBuilder var13;\r
+ if (var9 < (long) (CoreService.alarmCycle * 60 * 1000) && var9 > 0L) {\r
+ var11 = Integer.parseInt(var12.start.substring(2, 4));\r
+ var4 = Integer.parseInt(var12.start.substring(5, 7));\r
+ AlarmHelper.setTimeAlarm(this.mContext, var11, var4, "com.enqualcomm.support.OTHER_ALARM_START");\r
+ var13 = new StringBuilder();\r
+ var13.append("设置起始时间=hour");\r
+ var13.append(var11);\r
+ var13.append("minute+");\r
+ var13.append(var4);\r
+ ICLogger.i(var13.toString());\r
+ }\r
+\r
+ var9 = var12.endTimeMillis - var1;\r
+ if (var9 < (long) (CoreService.alarmCycle * 60 * 1000) && var9 > 0L) {\r
+ var11 = Integer.parseInt(var12.end.substring(2, 4));\r
+ var4 = Integer.parseInt(var12.end.substring(5, 7));\r
+ AlarmHelper.setTimeAlarm(this.mContext, var11, var4, "com.enqualcomm.support.OTHER_ALARM_END");\r
+ var13 = new StringBuilder();\r
+ var13.append("设置结束时间=hour");\r
+ var13.append(var11);\r
+ var13.append("minute+");\r
+ var13.append(var4);\r
+ ICLogger.i(var13.toString());\r
+ }\r
+\r
+ if (var12.startTimeMillis <= var1 && var12.endTimeMillis > var1) {\r
+ break;\r
+ }\r
+ }\r
}\r
\r
- if (var5.startTimeMillis > var2 || var5.endTimeMillis <= var2) {\r
- continue;\r
+ return var5;\r
+ }\r
+\r
+ private boolean isStheartRateTime(boolean var1) {\r
+ long var2 = System.currentTimeMillis();\r
+ ArrayList var4 = this.stheartRateList;\r
+ if (this.mTodayWeek == 1) {\r
+ this.mTodayWeek += 7;\r
}\r
\r
- this.mInterval = var5.interval;\r
- if (!var1) {\r
+ Iterator var12 = var4.iterator();\r
+\r
+ while (true) {\r
+ if (var12.hasNext()) {\r
+ StheartRate var5 = (StheartRate) var12.next();\r
+ String var6 = var5.week;\r
+ StringBuilder var7 = new StringBuilder();\r
+ var7.append(this.mTodayWeek - 1);\r
+ var7.append("");\r
+ if (!var6.contains(var7.toString())) {\r
+ continue;\r
+ }\r
+\r
+ long var8 = var5.startTimeMillis - var2;\r
+ int var10;\r
+ int var11;\r
+ if (var8 < (long) (CoreService.alarmCycle * 60 * 1000) && var8 > 0L) {\r
+ var10 = Integer.parseInt(var5.start.substring(2, 4));\r
+ var11 = Integer.parseInt(var5.start.substring(5, 7));\r
+ AlarmHelper.setTimeAlarm(this.mContext, var10, var11, "com.enqualcomm.support.OTHER_HEARTRATE_ALARM_START");\r
+ }\r
+\r
+ var8 = var5.endTimeMillis - var2;\r
+ if (var8 < (long) (CoreService.alarmCycle * 60 * 1000) && var8 > 0L) {\r
+ var10 = Integer.parseInt(var5.end.substring(2, 4));\r
+ var11 = Integer.parseInt(var5.end.substring(5, 7));\r
+ AlarmHelper.setTimeAlarm(this.mContext, var10, var11, "com.enqualcomm.support.OTHER_HEARTRATE_ALARM_END");\r
+ }\r
+\r
+ if (var5.startTimeMillis > var2 || var5.endTimeMillis <= var2) {\r
+ continue;\r
+ }\r
+\r
+ this.mInterval = var5.interval;\r
+ if (!var1) {\r
// AlarmHelper.setRealTimeAlarm(this.mContext, Integer.parseInt(this.mInterval), ACTION_HEATR_RATE_START);\r
// this.mRuntime.getContextProxy().sendStheartRateBroadcast(ACTION_HEATR_RATE_START, 0);\r
- }\r
+ }\r
\r
- var1 = true;\r
- break;\r
- }\r
+ var1 = true;\r
+ break;\r
+ }\r
\r
- var1 = false;\r
- break;\r
+ var1 = false;\r
+ break;\r
+ }\r
+\r
+ return var1;\r
}\r
\r
- return var1;\r
- }\r
+ private void onSilentStateChange(boolean var1) {\r
+ if (this.alarms != null) {\r
+ if (var1) {\r
+ this.cancelAlarm(this.alarms);\r
+ } else {\r
+ this.setNewAlarm(this.alarms);\r
+ }\r
+ }\r
\r
- private void onSilentStateChange(boolean var1) {\r
- if (this.alarms != null) {\r
- if (var1) {\r
- this.cancelAlarm(this.alarms);\r
- } else {\r
- this.setNewAlarm(this.alarms);\r
- }\r
- }\r
+ if (this.voiceNotice != null) {\r
+ if (var1) {\r
+ this.cancelNoticeAlarm(this.voiceNotice);\r
+ } else {\r
+ this.setNewNoticeAlarm(this.voiceNotice);\r
+ }\r
+ }\r
\r
- if (this.voiceNotice != null) {\r
- if (var1) {\r
- this.cancelNoticeAlarm(this.voiceNotice);\r
- } else {\r
- this.setNewNoticeAlarm(this.voiceNotice);\r
- }\r
}\r
\r
- }\r
+ private ArrayList<Alarm> queryAlarm() {\r
+ ArrayList var1 = this.mDbHelper.queryAlarm();\r
+ if (!this.mInSilent) {\r
+ if (this.alarms != null) {\r
+ this.cancelAlarm(this.alarms);\r
+ }\r
\r
- private ArrayList<Alarm> queryAlarm() {\r
- ArrayList var1 = this.mDbHelper.queryAlarm();\r
- if (!this.mInSilent) {\r
- if (this.alarms != null) {\r
- this.cancelAlarm(this.alarms);\r
- }\r
+ this.setNewAlarm(var1);\r
+ }\r
\r
- this.setNewAlarm(var1);\r
+ return var1;\r
}\r
\r
- return var1;\r
- }\r
+ private ArrayList<Antioff> queryAntioff() {\r
+ return this.mDbHelper.queryAntioff(true);\r
+ }\r
\r
- private ArrayList<Antioff> queryAntioff() {\r
- return this.mDbHelper.queryAntioff(true);\r
- }\r
+ private ArrayList<NoticeContent> queryNotice() {\r
+ String var1 = TimeUtil.getSystemTime4();\r
+ ArrayList var2 = this.mDbHelper.queryNotice(var1);\r
+ if (!this.mInSilent) {\r
+ if (this.voiceNotice != null) {\r
+ this.cancelNoticeAlarm(this.voiceNotice);\r
+ }\r
\r
- private ArrayList<NoticeContent> queryNotice() {\r
- String var1 = TimeUtil.getSystemTime4();\r
- ArrayList var2 = this.mDbHelper.queryNotice(var1);\r
- if (!this.mInSilent) {\r
- if (this.voiceNotice != null) {\r
- this.cancelNoticeAlarm(this.voiceNotice);\r
- }\r
+ this.setNewNoticeAlarm(var2);\r
+ }\r
\r
- this.setNewNoticeAlarm(var2);\r
+ return var2;\r
}\r
\r
- return var2;\r
- }\r
-\r
- private ArrayList<Silent> querySilent() {\r
- return this.mDbHelper.querySilence(true);\r
- }\r
-\r
- private ArrayList<StheartRate> queryStheartRate() {\r
- return this.mDbHelper.queryStheartRate(true);\r
- }\r
-\r
- private void setNewAlarm(ArrayList<Alarm> alarmArrayList) {\r
- Calendar calendar = Calendar.getInstance();\r
- calendar.set(Calendar.SECOND, 0);\r
- long currentTime = System.currentTimeMillis();\r
- Iterator itAlarm = alarmArrayList.iterator();\r
-\r
-\r
- while (itAlarm.hasNext()){\r
- Alarm alarm = (Alarm)itAlarm.next();\r
- if ("ON".equals(alarm.status)) {\r
- int hour = Integer.parseInt(alarm.time.substring(2, 4));\r
- int minute = Integer.parseInt(alarm.time.substring(5, 7));\r
- calendar.set(Calendar.HOUR_OF_DAY, hour);\r
- calendar.set(Calendar.MINUTE, minute);\r
-\r
- char[] weeklist = alarm.week.toCharArray();\r
- int weeklistlen = weeklist.length;\r
- ICLogger.i("repeat = "+alarm.week+", list size = "+weeklistlen);\r
- if (weeklistlen>1) {\r
- //如果week大于0 则证明有循环,没有循环就证明只是一次的闹铃。\r
- for (int i = 1; i < weeklistlen; i++) {\r
-\r
- long tmpTimeInMillis;\r
- int dayofweek = weeklist[i] - 47;\r
- calendar.set(Calendar.DAY_OF_WEEK, dayofweek);\r
- tmpTimeInMillis = calendar.getTimeInMillis();\r
- if (tmpTimeInMillis <= currentTime) {\r
- tmpTimeInMillis += ONE_WEEK;\r
- }\r
- Date date = new Date(tmpTimeInMillis);\r
- ICLogger.i("set date "+date.toLocaleString());\r
- PendingIntent pendingIntent = this.getPendingIntent(alarm.time, alarm.week, alarm.ring, alarm.name, dayofweek);\r
- AlarmHelper.setAlarm(this.mAlarmManager, tmpTimeInMillis, pendingIntent);\r
- }\r
- }else{\r
- //只是一次的闹铃\r
- long tmpTimeInMillis;\r
+ private ArrayList<Silent> querySilent() {\r
+ return this.mDbHelper.querySilence(true);\r
+ }\r
+\r
+ private ArrayList<StheartRate> queryStheartRate() {\r
+ return this.mDbHelper.queryStheartRate(true);\r
+ }\r
+\r
+ private void setNewAlarm(ArrayList<Alarm> alarmArrayList) {\r
+ Calendar calendar = Calendar.getInstance();\r
+ calendar.set(Calendar.SECOND, 0);\r
+ long currentTime = System.currentTimeMillis();\r
+ Iterator itAlarm = alarmArrayList.iterator();\r
+\r
+\r
+ while (itAlarm.hasNext()) {\r
+ Alarm alarm = (Alarm) itAlarm.next();\r
+ if ("ON".equals(alarm.status)) {\r
+ int hour = Integer.parseInt(alarm.time.substring(2, 4));\r
+ int minute = Integer.parseInt(alarm.time.substring(5, 7));\r
+ calendar.set(Calendar.HOUR_OF_DAY, hour);\r
+ calendar.set(Calendar.MINUTE, minute);\r
+\r
+ char[] weeklist = alarm.week.toCharArray();\r
+ int weeklistlen = weeklist.length;\r
+ ICLogger.i("repeat = " + alarm.week + ", list size = " + weeklistlen);\r
+ if (weeklistlen > 1) {\r
+ //如果week大于0 则证明有循环,没有循环就证明只是一次的闹铃。\r
+ for (int i = 1; i < weeklistlen; i++) {\r
+\r
+ long tmpTimeInMillis;\r
+ int dayofweek = weeklist[i] - 47;\r
+ calendar.set(Calendar.DAY_OF_WEEK, dayofweek);\r
+ tmpTimeInMillis = calendar.getTimeInMillis();\r
+ if (tmpTimeInMillis <= currentTime) {\r
+ tmpTimeInMillis += ONE_WEEK;\r
+ }\r
+ Date date = new Date(tmpTimeInMillis);\r
+ ICLogger.i("set date " + date.toLocaleString());\r
+ PendingIntent pendingIntent = this.getPendingIntent(alarm.time, alarm.week, alarm.ring, alarm.name, dayofweek);\r
+ AlarmHelper.setAlarm(this.mAlarmManager, tmpTimeInMillis, pendingIntent);\r
+ }\r
+ } else {\r
+ //只是一次的闹铃\r
+ long tmpTimeInMillis;\r
// int dayofweek = weeklist[i] - 47;\r
// calendar.set(Calendar.DAY_OF_WEEK, dayofweek);\r
// tmpTimeInMillis = calendar.getTimeInMillis();\r
\r
- Date date = new Date(System.currentTimeMillis());\r
- ICLogger.i("date "+date.toLocaleString());\r
- Calendar c = Calendar.getInstance();\r
- c.setTime(date);\r
- int wek = c.get(Calendar.DAY_OF_WEEK);\r
- calendar.set(Calendar.DAY_OF_WEEK, wek);\r
- tmpTimeInMillis = calendar.getTimeInMillis();\r
- if (tmpTimeInMillis <= currentTime) {\r
- tmpTimeInMillis += ONE_DAY;\r
- }\r
- date = new Date(tmpTimeInMillis);\r
- c = Calendar.getInstance();\r
- c.setTime(date);\r
- wek = c.get(Calendar.DAY_OF_WEEK);\r
-\r
- ICLogger.i("set date "+date.toLocaleString());\r
+ Date date = new Date(System.currentTimeMillis());\r
+ ICLogger.i("date " + date.toLocaleString());\r
+ Calendar c = Calendar.getInstance();\r
+ c.setTime(date);\r
+ int wek = c.get(Calendar.DAY_OF_WEEK);\r
+ calendar.set(Calendar.DAY_OF_WEEK, wek);\r
+ tmpTimeInMillis = calendar.getTimeInMillis();\r
+ if (tmpTimeInMillis <= currentTime) {\r
+ tmpTimeInMillis += ONE_DAY;\r
+ }\r
+ date = new Date(tmpTimeInMillis);\r
+ c = Calendar.getInstance();\r
+ c.setTime(date);\r
+ wek = c.get(Calendar.DAY_OF_WEEK);\r
+\r
+ ICLogger.i("set date " + date.toLocaleString());\r
+\r
+ PendingIntent pendingIntent = this.getPendingIntent(alarm.time, alarm.week, alarm.ring, alarm.name, wek);\r
+ AlarmHelper.setAlarmOnce(this.mAlarmManager, tmpTimeInMillis, pendingIntent);\r
+ }\r
\r
- PendingIntent pendingIntent = this.getPendingIntent(alarm.time, alarm.week, alarm.ring, alarm.name, wek);\r
- AlarmHelper.setAlarmOnce(this.mAlarmManager, tmpTimeInMillis, pendingIntent);\r
+ }\r
}\r
-\r
- }\r
}\r
- }\r
-\r
- private void setNewNoticeAlarm(ArrayList<NoticeContent> var1) {\r
- Iterator var19 = var1.iterator();\r
-\r
- while(var19.hasNext()) {\r
- NoticeContent var2 = (NoticeContent)var19.next();\r
- String var3 = var2.noticeTime;\r
- String var4 = var2.noticeName;\r
- String var5 = var2.noticeNumber;\r
- String var6 = var2.noticeID;\r
- String var7 = var2.noticeCategory;\r
- String var8 = var2.noticeFrequency;\r
- String var9 = var2.noticeContent;\r
- Calendar var10 = Calendar.getInstance();\r
- long var11 = System.currentTimeMillis();\r
- var10.set(Calendar.SECOND, 0);\r
- if (var3 != null) {\r
- String var13 = var3.substring(0, 4);\r
- String var20 = var3.substring(4, 6);\r
- String var14 = var3.substring(6, 8);\r
- String var15 = var3.substring(8, 10);\r
- String var16 = var3.substring(10, 12);\r
- var10.set(Calendar.YEAR, Integer.parseInt(var13));\r
- var10.set(Calendar.MONTH, Integer.parseInt(var20) - 1);\r
- var10.set(Calendar.DATE, Integer.parseInt(var14));\r
- var10.set(Calendar.HOUR_OF_DAY, Integer.parseInt(var15));\r
- var10.set(Calendar.MINUTE, Integer.parseInt(var16));\r
- long var17 = var10.getTimeInMillis();\r
- if (var17 >= var11) {\r
- PendingIntent var21 = this.getPendingIntent(var3, var4, var5, var6, var7, var8, var9);\r
- AlarmHelper.setAlarm(this.mAlarmManager, var17, var21);\r
+\r
+ private void setNewNoticeAlarm(ArrayList<NoticeContent> var1) {\r
+ Iterator var19 = var1.iterator();\r
+\r
+ while (var19.hasNext()) {\r
+ NoticeContent var2 = (NoticeContent) var19.next();\r
+ String var3 = var2.noticeTime;\r
+ String var4 = var2.noticeName;\r
+ String var5 = var2.noticeNumber;\r
+ String var6 = var2.noticeID;\r
+ String var7 = var2.noticeCategory;\r
+ String var8 = var2.noticeFrequency;\r
+ String var9 = var2.noticeContent;\r
+ Calendar var10 = Calendar.getInstance();\r
+ long var11 = System.currentTimeMillis();\r
+ var10.set(Calendar.SECOND, 0);\r
+ if (var3 != null) {\r
+ String var13 = var3.substring(0, 4);\r
+ String var20 = var3.substring(4, 6);\r
+ String var14 = var3.substring(6, 8);\r
+ String var15 = var3.substring(8, 10);\r
+ String var16 = var3.substring(10, 12);\r
+ var10.set(Calendar.YEAR, Integer.parseInt(var13));\r
+ var10.set(Calendar.MONTH, Integer.parseInt(var20) - 1);\r
+ var10.set(Calendar.DATE, Integer.parseInt(var14));\r
+ var10.set(Calendar.HOUR_OF_DAY, Integer.parseInt(var15));\r
+ var10.set(Calendar.MINUTE, Integer.parseInt(var16));\r
+ long var17 = var10.getTimeInMillis();\r
+ if (var17 >= var11) {\r
+ PendingIntent var21 = this.getPendingIntent(var3, var4, var5, var6, var7, var8, var9);\r
+ AlarmHelper.setAlarm(this.mAlarmManager, var17, var21);\r
+ }\r
+ }\r
}\r
- }\r
+\r
}\r
\r
- }\r
-\r
- public void onAlarmClock(Connection var1, Runtime var2) {\r
- this.handleSilent(var2, true);\r
- }\r
-\r
- public void onAttach(Connection var1, Runtime var2) {\r
- this.mRuntime = var2;\r
- this.mConnection = var1;\r
- this.mContext = var2.getContextProxy().context;\r
- this.mAlarmManager = (AlarmManager)this.mContext.getSystemService(Context.ALARM_SERVICE);\r
- this.mDbHelper = var2.getDbHelper();\r
- this.silentList = this.querySilent();\r
- this.getSilentListStartAndEndTime();\r
- this.mInSilent = this.isSilentTime();\r
- DBHelper var3 = this.mDbHelper;\r
- String var4;\r
- if (this.mInSilent) {\r
- var4 = "ON";\r
- } else {\r
- var4 = "OFF";\r
+ public void onAlarmClock(Connection var1, Runtime var2) {\r
+ this.handleSilent(var2, true);\r
}\r
\r
- var3.upDateorInsertDeviceStatus(var4);\r
- this.handSilence(this.mContext, this.mInSilent);\r
- this.stheartRateList = this.queryStheartRate();\r
- this.getStartAndEndStheartRateTime();\r
- this.mIsStheartRate = this.isStheartRateTime(false);\r
- this.alarms = this.queryAlarm();\r
- this.voiceNotice = this.queryNotice();\r
- var2.getContextProxy().context.getContentResolver().registerContentObserver(ICContentProvider.SILENT_URI, false, this.mContentObserver);\r
- this.mAlramReceiver = new SilentManager.AlramReceiver();\r
- IntentFilter var5 = new IntentFilter();\r
- var5.addAction("com.enqualcomm.support.ACTION_NOTICE_ALARM_CHANGE");\r
- var5.addAction("com.enqualcomm.support.ACTION_ALARM_ALARM_CHANGE");\r
- var5.addAction("com.enqualcomm.support.STHEART_RATE_ALARM_CHANGE");\r
- var5.addAction("com.eqc.heartrate.action.RESULT");\r
- this.mContext.registerReceiver(this.mAlramReceiver, var5);\r
- var2.getContextProxy().getTelephonyManager().listen(this.phoneStateListener, 32);\r
- }\r
-\r
- public void onDetach(Connection var1, Runtime var2) {\r
- var2.getContextProxy().context.getContentResolver().unregisterContentObserver(this.mContentObserver);\r
- this.mContext.unregisterReceiver(this.mAlramReceiver);\r
- }\r
-\r
- @Override\r
- public boolean onUserRequest(Intent var1, Connection var2, Runtime var3) {\r
- String action = var1.getAction();\r
- if (ACTION_CARE_ALARM.equals(action)) {\r
- String alarmTime = var1.getDataString(); //alarm:ST00.43,W,CON,闹铃,2\r
- String currentTime = TimeUtil.getSystemTime();\r
- alarmTime.substring(6).split("\\.");\r
- int alarmTime_minutes = Integer.parseInt(alarmTime.substring(6).split("\\.")[1].substring(0, 2));\r
- int alarmTime_hour = Integer.parseInt(alarmTime.substring(6).split("\\.")[0].substring(2));\r
- String[] currentTimeArray = currentTime.split(";")[1].split(":");\r
- int currentTime_hour = Integer.parseInt(currentTimeArray[0]);\r
- int currentTime_minutes = Integer.parseInt(currentTimeArray[1]);\r
- ICLogger.i("alarm time["+alarmTime_hour+":"+alarmTime_minutes+"], current time["+currentTime_hour+":"+currentTime_minutes+"]");\r
- if (alarmTime_hour != currentTime_hour || alarmTime_minutes != currentTime_minutes) {\r
- return false;\r
- }\r
-\r
- if (this.isIdle(this.mContext)) {\r
- try {\r
- Intent intent = new Intent("com.enqualcomm.icare.ALARM", Uri.parse(alarmTime));\r
- intent.putExtra("closeAlarm", 0);\r
- intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);\r
- this.mContext.startActivity(intent);\r
- } catch (Exception var9) {\r
- var9.printStackTrace();\r
+ public void onAttach(Connection var1, Runtime var2) {\r
+ this.mRuntime = var2;\r
+ this.mConnection = var1;\r
+ this.mContext = var2.getContextProxy().context;\r
+ this.mAlarmManager = (AlarmManager) this.mContext.getSystemService(Context.ALARM_SERVICE);\r
+ this.mDbHelper = var2.getDbHelper();\r
+ this.silentList = this.querySilent();\r
+ this.getSilentListStartAndEndTime();\r
+ this.mInSilent = this.isSilentTime();\r
+ DBHelper var3 = this.mDbHelper;\r
+ String var4;\r
+ if (this.mInSilent) {\r
+ var4 = "ON";\r
+ } else {\r
+ var4 = "OFF";\r
}\r
- }\r
- } else if ("com.enqualcomm.support.ACTION_NOTICE_ALARM".equals(action)) {\r
- String alarmTime = var1.getDataString();\r
- if (this.isIdle(this.mContext)) {\r
- try {\r
- var1 = new Intent("com.enqualcomm.icare.NOTICE", Uri.parse(alarmTime));\r
- var1.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);\r
- this.mContext.startActivity(var1);\r
- } catch (Exception var8) {\r
- var8.printStackTrace();\r
- }\r
- }\r
- } else {\r
- ICLogger.i("静默闹钟来了");\r
- boolean var4;\r
- if (!"com.eqc.heartrate.action.SILENT_START".equals(action) && !"com.enqualcomm.support.OTHER_HEARTRATE_ALARM_START".equals(action)) {\r
- var4 = false;\r
- } else {\r
- var4 = true;\r
- }\r
-\r
- this.handleSilent(var3, var4 ^ true);\r
+\r
+ var3.upDateorInsertDeviceStatus(var4);\r
+ this.handSilence(this.mContext, this.mInSilent);\r
+ this.stheartRateList = this.queryStheartRate();\r
+ this.getStartAndEndStheartRateTime();\r
+ this.mIsStheartRate = this.isStheartRateTime(false);\r
+ this.alarms = this.queryAlarm();\r
+ this.voiceNotice = this.queryNotice();\r
+ var2.getContextProxy().context.getContentResolver().registerContentObserver(ICContentProvider.SILENT_URI, false, this.mContentObserver);\r
+ this.mAlramReceiver = new SilentManager.AlramReceiver();\r
+ IntentFilter var5 = new IntentFilter();\r
+ var5.addAction("com.enqualcomm.support.ACTION_NOTICE_ALARM_CHANGE");\r
+ var5.addAction("com.enqualcomm.support.ACTION_ALARM_ALARM_CHANGE");\r
+ var5.addAction("com.enqualcomm.support.STHEART_RATE_ALARM_CHANGE");\r
+ var5.addAction("com.eqc.heartrate.action.RESULT");\r
+ this.mContext.registerReceiver(this.mAlramReceiver, var5);\r
+ var2.getContextProxy().getTelephonyManager().listen(this.phoneStateListener, 32);\r
}\r
\r
- return false;\r
- }\r
+ public void onDetach(Connection var1, Runtime var2) {\r
+ var2.getContextProxy().context.getContentResolver().unregisterContentObserver(this.mContentObserver);\r
+ this.mContext.unregisterReceiver(this.mAlramReceiver);\r
+ }\r
\r
- @Override\r
- public boolean onUserRequest(Message paramMessage, Connection paramConnection, Runtime paramRuntime) {\r
- return false;\r
- }\r
+ @Override\r
+ public boolean onUserRequest(Intent var1, Connection var2, Runtime var3) {\r
+ String action = var1.getAction();\r
+ if (ACTION_CARE_ALARM.equals(action)) {\r
+ String alarmTime = var1.getDataString(); //alarm:ST00.43,W,CON,闹铃,2\r
+ String currentTime = TimeUtil.getSystemTime();\r
+ alarmTime.substring(6).split("\\.");\r
+ int alarmTime_minutes = Integer.parseInt(alarmTime.substring(6).split("\\.")[1].substring(0, 2));\r
+ int alarmTime_hour = Integer.parseInt(alarmTime.substring(6).split("\\.")[0].substring(2));\r
+ String[] currentTimeArray = currentTime.split(";")[1].split(":");\r
+ int currentTime_hour = Integer.parseInt(currentTimeArray[0]);\r
+ int currentTime_minutes = Integer.parseInt(currentTimeArray[1]);\r
+ ICLogger.i("alarm time[" + alarmTime_hour + ":" + alarmTime_minutes + "], current time[" + currentTime_hour + ":" + currentTime_minutes + "]");\r
+ if (alarmTime_hour != currentTime_hour || alarmTime_minutes != currentTime_minutes) {\r
+ return false;\r
+ }\r
+\r
+ if (this.isIdle(this.mContext)) {\r
+ try {\r
+ Intent intent = new Intent("com.enqualcomm.icare.ALARM", Uri.parse(alarmTime));\r
+ intent.putExtra("closeAlarm", 0);\r
+ intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);\r
+ this.mContext.startActivity(intent);\r
+ } catch (Exception var9) {\r
+ var9.printStackTrace();\r
+ }\r
+ }\r
+ } else if ("com.enqualcomm.support.ACTION_NOTICE_ALARM".equals(action)) {\r
+ String alarmTime = var1.getDataString();\r
+ if (this.isIdle(this.mContext)) {\r
+ try {\r
+ var1 = new Intent("com.enqualcomm.icare.NOTICE", Uri.parse(alarmTime));\r
+ var1.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);\r
+ this.mContext.startActivity(var1);\r
+ } catch (Exception var8) {\r
+ var8.printStackTrace();\r
+ }\r
+ }\r
+ } else {\r
+ ICLogger.i("静默闹钟来了");\r
+ boolean var4;\r
+ if (!"com.eqc.heartrate.action.SILENT_START".equals(action) && !"com.enqualcomm.support.OTHER_HEARTRATE_ALARM_START".equals(action)) {\r
+ var4 = false;\r
+ } else {\r
+ var4 = true;\r
+ }\r
\r
- class AlramReceiver extends BroadcastReceiver {\r
- AlramReceiver() {\r
+ this.handleSilent(var3, var4 ^ true);\r
+ }\r
+\r
+ return false;\r
+ }\r
+\r
+ @Override\r
+ public boolean onUserRequest(Message paramMessage, Connection paramConnection, Runtime paramRuntime) {\r
+ return false;\r
}\r
\r
- public void onReceive(Context var1, Intent var2) {\r
- String var6 = var2.getAction();\r
- StringBuilder var3 = new StringBuilder();\r
- var3.append("action = ");\r
- var3.append(var6);\r
- ICLogger.i(var3.toString());\r
- if ("com.enqualcomm.support.ACTION_NOTICE_ALARM_CHANGE".equals(var6)) {\r
- SilentManager.this.voiceNotice = SilentManager.this.queryNotice();\r
- } else if ("com.enqualcomm.support.ACTION_ALARM_ALARM_CHANGE".equals(var6)) {\r
- SilentManager.this.alarms = SilentManager.this.queryAlarm();\r
- } else if ("com.enqualcomm.support.STHEART_RATE_ALARM_CHANGE".equals(var6)) {\r
- SilentManager.this.stheartRateList = SilentManager.this.queryStheartRate();\r
- SilentManager.this.getStartAndEndStheartRateTime();\r
- SilentManager.this.isStheartRateTime(false);\r
- } else if ("com.eqc.heartrate.action.RESULT".equals(var6)) {\r
- var6 = var2.getStringExtra("time");\r
- int var4 = var2.getIntExtra("value", 0);\r
- int var5 = var2.getIntExtra("type", 0);\r
- StringBuilder var7 = new StringBuilder();\r
- var7.append("(");\r
- var7.append(var6);\r
- var7.append("@");\r
- var7.append(var4);\r
- var7.append("@");\r
- var7.append(var5);\r
- var7.append(")");\r
- var6 = var7.toString();\r
+ class AlramReceiver extends BroadcastReceiver {\r
+ AlramReceiver() {\r
+ }\r
+\r
+ public void onReceive(Context var1, Intent var2) {\r
+ String var6 = var2.getAction();\r
+ StringBuilder var3 = new StringBuilder();\r
+ var3.append("action = ");\r
+ var3.append(var6);\r
+ ICLogger.i(var3.toString());\r
+ if ("com.enqualcomm.support.ACTION_NOTICE_ALARM_CHANGE".equals(var6)) {\r
+ SilentManager.this.voiceNotice = SilentManager.this.queryNotice();\r
+ } else if ("com.enqualcomm.support.ACTION_ALARM_ALARM_CHANGE".equals(var6)) {\r
+ SilentManager.this.alarms = SilentManager.this.queryAlarm();\r
+ } else if ("com.enqualcomm.support.STHEART_RATE_ALARM_CHANGE".equals(var6)) {\r
+ SilentManager.this.stheartRateList = SilentManager.this.queryStheartRate();\r
+ SilentManager.this.getStartAndEndStheartRateTime();\r
+ SilentManager.this.isStheartRateTime(false);\r
+ } else if ("com.eqc.heartrate.action.RESULT".equals(var6)) {\r
+ var6 = var2.getStringExtra("time");\r
+ int var4 = var2.getIntExtra("value", 0);\r
+ int var5 = var2.getIntExtra("type", 0);\r
+ StringBuilder var7 = new StringBuilder();\r
+ var7.append("(");\r
+ var7.append(var6);\r
+ var7.append("@");\r
+ var7.append(var4);\r
+ var7.append("@");\r
+ var7.append(var5);\r
+ var7.append(")");\r
+ var6 = var7.toString();\r
// SilentManager.this.mConnection.send(API.H60(SilentManager.this.mRuntime, var6));\r
- } else if ("com.enqualcomm.support.ACTION_ANTIOFF_ALARM_CHANGE".equals(var6)) {\r
- SilentManager.this.sAntioffList = SilentManager.this.queryAntioff();\r
- SilentManager.this.getStartAndEndSantioffTime();\r
- SilentManager.this.mIsNeedAntioff = SilentManager.this.isAntioffTime(false);\r
- }\r
+ } else if ("com.enqualcomm.support.ACTION_ANTIOFF_ALARM_CHANGE".equals(var6)) {\r
+ SilentManager.this.sAntioffList = SilentManager.this.queryAntioff();\r
+ SilentManager.this.getStartAndEndSantioffTime();\r
+ SilentManager.this.mIsNeedAntioff = SilentManager.this.isAntioffTime(false);\r
+ }\r
\r
+ }\r
}\r
- }\r
}
\ No newline at end of file
package com.enqualcomm.support.utils;\r
\r
-import android.app.Notification;\r
import android.app.NotificationManager;\r
import android.content.BroadcastReceiver;\r
import android.content.ComponentName;\r
import android.content.Context;\r
import android.content.DialogInterface;\r
import android.content.Intent;\r
-import android.media.RingtoneManager;\r
-import android.net.Uri;\r
import android.os.Handler;\r
-import android.os.Messenger;\r
import android.os.PowerManager;\r
import android.os.Vibrator;\r
-import android.support.v4.app.NotificationCompat;\r
-import android.view.Gravity;\r
-import android.view.MotionEvent;\r
-import android.view.View;\r
import android.view.WindowManager;\r
\r
-\r
import com.enqualcomm.support.Config;\r
import com.enqualcomm.support.Constants;\r
import com.enqualcomm.support.CoreService;\r
-import com.enqualcomm.support.LocationClient;\r
import com.enqualcomm.support.R;\r
-import com.enqualcomm.support.bean.NotificationParam;\r
+import com.enqualcomm.support.bean.Contact;\r
import com.enqualcomm.support.bean.Runtime;\r
import com.enqualcomm.support.bean.VoiceContent;\r
-import com.enqualcomm.support.service.Deliver;\r
-import com.ic.jni.ICJniUtils;\r
-import com.enqualcomm.support.bean.Contact;\r
import com.enqualcomm.support.service.AudioService;\r
-import com.enqualcomm.support.service.HeartRateManager;\r
+import com.enqualcomm.support.service.Deliver;\r
import com.ic.protocols.protocolAPIHelper;\r
\r
-import java.util.concurrent.TimeUnit;\r
-\r
-import rx.Observable;\r
-import rx.Subscriber;\r
-import rx.functions.Action1;\r
-import rx.schedulers.Schedulers;\r
-\r
import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK;\r
-import static android.media.RingtoneManager.TYPE_NOTIFICATION;\r
import static android.os.PowerManager.ACQUIRE_CAUSES_WAKEUP;\r
import static android.os.PowerManager.SCREEN_DIM_WAKE_LOCK;\r
-import static com.enqualcomm.support.Constants.ACTION_CLOSE_UNREAD_MSG;\r
-import static com.enqualcomm.support.Constants.ACTION_HEATR_RATE_START;\r
import static com.enqualcomm.support.Constants.ACTION_MESSAGE_SENT;\r
import static com.enqualcomm.support.Constants.ACTION_PLAYTIME;\r
import static com.enqualcomm.support.Constants.ACTION_REMOTE_CAMERA;\r
-import static com.enqualcomm.support.Constants.ACTION_SEND_EMEGENCY_LOCATION_START;\r
-import static com.enqualcomm.support.Constants.ACTION_SEND_SOS_MSG;\r
import static com.enqualcomm.support.Constants.ACTION_SET_SIT_RANGE;\r
import static com.enqualcomm.support.Constants.ACTION_SHUTDOWN;\r
import static com.enqualcomm.support.Constants.ACTION_TEMP_RESULT;\r
import static com.enqualcomm.support.Constants.KEY_TEMP_BODY;\r
import static com.enqualcomm.support.Constants.KEY_TEMP_WRIST;\r
import static com.enqualcomm.support.Constants.RESUME_ACTION;\r
-\r
import static com.enqualcomm.support.bean.Content.CONTACT_CATEGORY_GROUP;\r
\r
\r
SharPreferenceUtil.getPrefBoolean(paramContext, "key_is_resume", false);\r
isSilence = SharPreferenceUtil.getPrefBoolean(paramContext, "KEY_ISSILENCE", false);\r
if (sms != null && !isSilence) {\r
- if (!DeviceInfoUtil.isTopActivity(paramContext)) {\r
- this.initMyDialog(paramContext, null, 3, sms);\r
- this.playNotificationVoice(paramContext);\r
- VibrateUtil.getInstance(paramContext).VibrateOn(true);\r
- }\r
-\r
- this.screenOn(paramContext);\r
+ //if (!DeviceInfoUtil.isTopActivity(paramContext)) {\r
+ //his.initMyDialog(paramContext, null, 3, sms);\r
+ //this.playNotificationVoice(paramContext);\r
+ //VibrateUtil.getInstance(paramContext).VibrateOn(true);\r
+ //}\r
+ //this.screenOn(paramContext);\r
}\r
} else if (paramIntent.hasExtra("pushtxt")) {\r
String sms = paramIntent.getStringExtra("pushtxt");\r
import android.os.Message;\r
import android.util.Log;\r
\r
-import java.io.IOException;\r
-\r
import se.wetcat.qatja.MQTTConstants;\r
-import se.wetcat.qatja.MQTTException;\r
import se.wetcat.qatja.android.MQTTConnectionConstants;\r
import se.wetcat.qatja.android.QatjaService;\r
-import se.wetcat.qatja.messages.MQTTMessage;\r
import se.wetcat.qatja.messages.MQTTPublish;\r
\r
public class protocol_mqtt_client {\r
\r
- private String TAG=protocol_mqtt_client.class.getSimpleName();\r
+ private String TAG = protocol_mqtt_client.class.getSimpleName();\r
private Handler mHandler = new Handler(new MqttCallback());\r
- QatjaService mClient=null;\r
+ QatjaService mClient = null;\r
private Context mContext;\r
private boolean isBound = false;\r
private boolean isBinding = false;\r
\r
private class MqttCallback implements Handler.Callback {\r
@Override\r
- public boolean handleMessage(Message msg)\r
- {\r
+ public boolean handleMessage(Message msg) {\r
\r
- switch (msg.what) {\r
- case MQTTConnectionConstants.STATE_CHANGE:\r
- handleStateChange(msg);\r
+ switch (msg.what) {\r
+ case MQTTConnectionConstants.STATE_CHANGE:\r
+ handleStateChange(msg);\r
+ break;\r
+ case 3:\r
+ handleReceivedMessage(msg);\r
break;\r
- case 3:\r
- handleReceivedMessage(msg);\r
- break;\r
- }\r
- return true;\r
}\r
+ return true;\r
+ }\r
\r
}\r
\r
- public protocol_mqtt_client(Context context ) {\r
+ public protocol_mqtt_client(Context context) {\r
\r
- mContext=context;\r
+ mContext = context;\r
}\r
+\r
private void handleStateChange(Message msg) {\r
Log.e(TAG, MQTTConnectionConstants.resolveStateName(msg.arg1));\r
\r
break;\r
default:\r
Log.e(TAG, "Unhandled MQTT state change");\r
- break;\r
+ break;\r
}\r
}\r
\r
private void handleReceivedMessage(Message msg) {\r
- MQTTPublish publish = (MQTTPublish)msg.obj;\r
+ MQTTPublish publish = (MQTTPublish) msg.obj;\r
\r
// if (isDebug()) {\r
- Log.d(TAG, "handleReceivedMessage(${publish.topicName})"+publish.getTopicName()+" data "+new String(publish.getPayload()));\r
+ Log.d(TAG, "handleReceivedMessage(${publish.topicName})" + publish.getTopicName() + " data " + new String(publish.getPayload()));\r
// }\r
}\r
\r
private ServiceConnection mConnection = new ServiceConnection() {\r
@Override\r
public void onServiceConnected(ComponentName componentName, IBinder iBinder) {\r
- mClient = ((QatjaService.QatjaBinder)iBinder).getService();\r
+ mClient = ((QatjaService.QatjaBinder) iBinder).getService();\r
\r
isBound = true;\r
isBinding = false;\r
};\r
\r
\r
- public void Resume() {\r
+ public void Resume() {\r
attemptBindService();\r
}\r
\r
\r
isBinding = false;\r
isBound = false;\r
- } catch ( IllegalArgumentException ex) {\r
+ } catch (IllegalArgumentException ex) {\r
Log.e(TAG, "Couldn't unbind the service, this is probably fine considering the state changes in the app... can probably ignore this.", ex);\r
}\r
\r
}\r
\r
public void attemptSubscribeToTopic(String topic) {\r
- Log.d(TAG, "attemptSubscribeToTopic($topic)"+topic);\r
+ Log.d(TAG, "attemptSubscribeToTopic($topic)" + topic);\r
\r
\r
- try {\r
- mClient.subscribe(topic, MQTTConstants.AT_MOST_ONCE);\r
- } catch (Exception ex) {\r
- Log.e(TAG, ex.getMessage());\r
- }\r
+ try {\r
+ mClient.subscribe(topic, MQTTConstants.AT_MOST_ONCE);\r
+ } catch (Exception ex) {\r
+ Log.e(TAG, ex.getMessage());\r
+ }\r
\r
}\r
\r
\r
private void attemptBindService() {\r
// if (isDebug()) {\r
- Log.d(TAG, "attemptBindService() [isBound: $isBound, isBinding: $isBinding]");\r
+ Log.d(TAG, "attemptBindService() [isBound: $isBound, isBinding: $isBinding]");\r
// }\r
if (!isBound && !isBinding) {\r
isBinding = true;\r
\r
}\r
\r
- public void attemptConnectMqtt(String host,String identifier, int cycle_inSeconds) {\r
+ public void attemptConnectMqtt(String host, String identifier, int cycle_inSeconds) {\r
Log.d(TAG, "attemptConnectMqtt($host, $identifier)");\r
\r
- if (!(MQTTConnectionConstants.STATE_CONNECTING== mClient.getState() || MQTTConnectionConstants.STATE_CONNECTED == mClient.getState()))\r
- {\r
+ if (!(MQTTConnectionConstants.STATE_CONNECTING == mClient.getState() || MQTTConnectionConstants.STATE_CONNECTED == mClient.getState())) {\r
try {\r
mClient.setHost(host);\r
mClient.setPort(1883);\r
mClient.setIdentifier(identifier);\r
- mClient.setKeepAlive(cycle_inSeconds*1000);\r
+ mClient.setKeepAlive(cycle_inSeconds * 1000);\r
mClient.setCleanSession(true);\r
\r
mClient.connect();\r
}\r
\r
void onMqttConnected() {\r
- Log.i(TAG,"onMqttConnected");\r
+ Log.i(TAG, "onMqttConnected");\r
attemptSubscribeToTopic("WBG100/v1/1/+");\r
\r
}\r
+\r
void onMqttDisconnected() {\r
- Log.i(TAG,"onMqttDisconnected");\r
+ Log.i(TAG, "onMqttDisconnected");\r
\r
}\r
\r
\r
- public void sendMessage(String topic,String data){\r
+ public void sendMessage(String topic, String data) {\r
\r
- mClient.publish(topic,data);\r
+ mClient.publish(topic, data);\r
}\r
}\r
*/
public class QatjaService extends Service {
- private static final boolean DEBUG = true;
-
- private static final String TAG = QatjaService.class.getSimpleName();
-
- /**
- * Current state of the connection
- */
- private volatile int mState = STATE_NONE;
-
- /**
- * How long to wait before a reconnect attempt is made
- */
- private long mReconnectDelay = 5000;
-
- /**
- * Thread to handle setup of connections
- */
- private ConnectThread mConnectThread;
-
- /**
- * Thread to handle communication when connection is established.
- */
- private ConnectedThread mConnectedThread;
-
- /**
- * Keepalive timer
- */
- private int KEEP_ALIVE_TIMER = 3000;
-
- /**
- * Handler used to queue PINGRESP messages, will be automatically queued when sending a message,
- * or when connecting.
- */
- private Handler mKeepaliveHandler;
-
- /**
- *
- */
- private Handler mHandler = null;
-
- /**
- * The local binder object
- */
- private final QatjaBinder mBinder = new QatjaBinder();
-
- /**
- * The default is the localhost (emulator link to
- */
- private String host = "47.106.237.76";
-
- /**
- * The default is no SSL, turning this on before connect will enforce an SSL connection attempt.
- */
- private SSLSocketFactory socketFactory = null;
-
- private int port = 1883;
-
- /*
- For some reason used in interop test suites... only reason it's included here.
- */
- private String protocolName = null;
-
- /**
- * Unique identifier for this client
- */
- private String clientIdentifier;
-
- /*
- * TODO: These should be removed from here in future release, no reason to store them here, right?
- */
- private String mUsername, mPassword;
-
- private boolean cleanSession = true;
-
- private boolean willFlag;
- private String willTopic;
- private String willMessage;
- private HashSet<String> subscribedTopics;
-
- // PING VARIABLES
- private volatile long lastPingResp = 0L;
- private volatile long lastSentMessage = 0L;
-
- private MQTTIdentifierHelper mMqttIdentifierHelper;
-
- private boolean doAutomaticReconnect = false;
- private Handler reconnectHandler = new Handler();
- private Runnable recoonectRunnable = new Runnable() {
- @Override
- public void run() {
- if (mState != STATE_CONNECTING && mState != STATE_CONNECTED) {
- connect();
- }
+ private static final boolean DEBUG = true;
+
+ private static final String TAG = QatjaService.class.getSimpleName();
+
+ /**
+ * Current state of the connection
+ */
+ private volatile int mState = STATE_NONE;
+
+ /**
+ * How long to wait before a reconnect attempt is made
+ */
+ private long mReconnectDelay = 5000;
+
+ /**
+ * Thread to handle setup of connections
+ */
+ private ConnectThread mConnectThread;
+
+ /**
+ * Thread to handle communication when connection is established.
+ */
+ private ConnectedThread mConnectedThread;
+
+ /**
+ * Keepalive timer
+ */
+ private int KEEP_ALIVE_TIMER = 3000;
+
+ /**
+ * Handler used to queue PINGRESP messages, will be automatically queued when sending a message,
+ * or when connecting.
+ */
+ private Handler mKeepaliveHandler;
+
+ /**
+ *
+ */
+ private Handler mHandler = null;
+
+ /**
+ * The local binder object
+ */
+ private final QatjaBinder mBinder = new QatjaBinder();
+
+ /**
+ * The default is the localhost (emulator link to
+ */
+ private String host = "47.106.237.76";
+
+ /**
+ * The default is no SSL, turning this on before connect will enforce an SSL connection attempt.
+ */
+ private SSLSocketFactory socketFactory = null;
+
+ private int port = 1883;
+
+ /*
+ For some reason used in interop test suites... only reason it's included here.
+ */
+ private String protocolName = null;
+
+ /**
+ * Unique identifier for this client
+ */
+ private String clientIdentifier;
+
+ /*
+ * TODO: These should be removed from here in future release, no reason to store them here, right?
+ */
+ private String mUsername, mPassword;
+
+ private boolean cleanSession = true;
+
+ private boolean willFlag;
+ private String willTopic;
+ private String willMessage;
+ private HashSet<String> subscribedTopics;
+
+ // PING VARIABLES
+ private volatile long lastPingResp = 0L;
+ private volatile long lastSentMessage = 0L;
+
+ private MQTTIdentifierHelper mMqttIdentifierHelper;
+
+ private boolean doAutomaticReconnect = false;
+ private Handler reconnectHandler = new Handler();
+ private Runnable recoonectRunnable = new Runnable() {
+ @Override
+ public void run() {
+ if (mState != STATE_CONNECTING && mState != STATE_CONNECTED) {
+ connect();
+ }
+ }
+ };
+
+ private StateListener mStateListener = null;
+
+ public interface StateListener {
+ void onStateChanged(int newState);
+ }
+
+ public void setStateListener(StateListener stateListener) {
+ mStateListener = stateListener;
+
+ if (mStateListener != null) {
+ mStateListener.onStateChanged(mState);
+ }
}
- };
- private StateListener mStateListener = null;
+ @Override
+ public void onCreate() {
+ super.onCreate();
- public interface StateListener {
- void onStateChanged(int newState);
- }
+ if (DEBUG)
+ Log.d(TAG, "onCreate");
- public void setStateListener(StateListener stateListener) {
- mStateListener = stateListener;
+ subscribedTopics = new HashSet<>();
+
+ mMqttIdentifierHelper = new MQTTIdentifierHelper();
- if (mStateListener != null) {
- mStateListener.onStateChanged(mState);
}
- }
- @Override
- public void onCreate() {
- super.onCreate();
+ @Override
+ public int onStartCommand(Intent intent, int flags, int startId) {
+ if (DEBUG)
+ Log.d(TAG, "onStartCommand");
- if (DEBUG)
- Log.d(TAG, "onCreate");
+ // Start a sticky service, the system will try to recreate this service if killed.
- subscribedTopics = new HashSet<>();
+ return START_STICKY;
+ }
- mMqttIdentifierHelper = new MQTTIdentifierHelper();
+ @Override
+ public void onDestroy() {
+ cleanUp();
- }
+ setState(STATE_NONE);
- @Override
- public int onStartCommand(Intent intent, int flags, int startId) {
- if (DEBUG)
- Log.d(TAG, "onStartCommand");
+ if (DEBUG)
+ Log.d(TAG, "onDestroy");
- // Start a sticky service, the system will try to recreate this service if killed.
+ super.onDestroy();
+ }
- return START_STICKY;
- }
+ @Override
+ public IBinder onBind(Intent intent) {
+ if (DEBUG)
+ Log.d(TAG, "onBind");
- @Override
- public void onDestroy() {
- cleanUp();
+ return mBinder;
+ }
- setState(STATE_NONE);
+ /**
+ * @author andreas
+ */
+ public class QatjaBinder extends Binder {
+ public QatjaService getService() {
+ return QatjaService.this;
+ }
+ }
- if (DEBUG)
- Log.d(TAG, "onDestroy");
+ /**
+ * Set Handler that receives all service state messages and mqtt messages
+ *
+ * @param handler The listener
+ */
+ public void setHandler(Handler handler) {
+ mHandler = handler;
+ }
- super.onDestroy();
- }
+ /**
+ * Send a CONNECT message to the server.
+ */
+ private void connect(String clientIdentifier) {
- @Override
- public IBinder onBind(Intent intent) {
- if (DEBUG)
- Log.d(TAG, "onBind");
+ MQTTConnect connect;
+ if (!TextUtils.isEmpty(mUsername) && !TextUtils.isEmpty(mPassword)) {
+ connect = MQTTConnect.newInstance(clientIdentifier, mUsername, mPassword);
+ } else {
+ connect = MQTTConnect.newInstance(clientIdentifier);
+ }
- return mBinder;
- }
+ connect.setCleanSession(cleanSession);
+ connect.setKeepAlive(60);
+ connect.setWillFlag(willFlag);
+ if (willFlag) {
+ connect.setWillTopic(willTopic);
+ connect.setWillMessage(willMessage);
+ }
+
+ if (protocolName != null)
+ connect.setProtocolName(protocolName);
- /**
- * @author andreas
- */
- public class QatjaBinder extends Binder {
- public QatjaService getService() {
- return QatjaService.this;
+ sendMessage(connect, false);
}
- }
-
- /**
- * Set Handler that receives all service state messages and mqtt messages
- *
- * @param handler The listener
- */
- public void setHandler(Handler handler) {
- mHandler = handler;
- }
-
- /**
- * Send a CONNECT message to the server.
- */
- private void connect(String clientIdentifier) {
-
- MQTTConnect connect;
- if (!TextUtils.isEmpty(mUsername) && !TextUtils.isEmpty(mPassword)) {
- connect = MQTTConnect.newInstance(clientIdentifier, mUsername, mPassword);
- } else {
- connect = MQTTConnect.newInstance(clientIdentifier);
+
+ /**
+ * Publish a message (String) to a specified topic.
+ *
+ * @param topic Topic to publish to
+ * @param message Message to publish
+ */
+ public void publish(String topic, String message) {
+ publish(topic, message.getBytes());
}
- connect.setCleanSession(cleanSession);
- connect.setKeepAlive(60);
- connect.setWillFlag(willFlag);
- if (willFlag) {
- connect.setWillTopic(willTopic);
- connect.setWillMessage(willMessage);
+ /**
+ * Publish a payload (byte[]) to a specified topic.
+ *
+ * @param topic Topic to publish to
+ * @param payload Message to publish
+ */
+ public void publish(String topic, byte[] payload) {
+ publish(topic, payload, AT_MOST_ONCE);
}
- if (protocolName != null)
- connect.setProtocolName(protocolName);
-
- sendMessage(connect, false);
- }
-
- /**
- * Publish a message (String) to a specified topic.
- *
- * @param topic Topic to publish to
- * @param message Message to publish
- */
- public void publish(String topic, String message) {
- publish(topic, message.getBytes());
- }
-
- /**
- * Publish a payload (byte[]) to a specified topic.
- *
- * @param topic Topic to publish to
- * @param payload Message to publish
- */
- public void publish(String topic, byte[] payload) {
- publish(topic, payload, AT_MOST_ONCE);
- }
-
- /**
- * Publish a message to a specified topic.
- *
- * @param topic Topic to publish to
- * @param message Message to publish
- * @param qos Quality of service to publish as
- */
- public void publish(String topic, String message, byte qos) {
- publish(topic, message.getBytes(), qos);
- }
-
- /**
- * Publish a message (byte[]) to a specified topic.
- *
- * @param topic the topic
- * @param payload the message
- * @param qos the desired quality of service
- */
- public void publish(String topic, byte[] payload, byte qos) {
- MQTTPublish publish = MQTTPublish.newInstance(topic, payload, qos, mMqttIdentifierHelper.getIdentifier());
- sendMessage(publish);
- }
-
- /**
- * Publish a retained message to a specified topic.
- *
- * @param topic the topic
- * @param message the message
- * @param qos the desired quality of service
- */
- public void publishRetain(String topic, String message, byte qos) {
- publishRetain(topic, message.getBytes(), qos);
- }
-
- /**
- * Publish a retained message to a specified topic.
- *
- * @param topic the topic
- * @param payload the message to publish
- * @param qos the desired quality of service
- */
- public void publishRetain(String topic, byte[] payload, byte qos) {
- MQTTPublish publish = MQTTPublish.newInstance(topic, payload, qos);
- publish.setRetain(true);
- sendMessage(publish);
- }
-
- /**
- * Subscribe to a topic with Quality of Service (QoS) level
- * {@link se.wetcat.qatja.MQTTConstants#AT_MOST_ONCE}
- *
- * @param topic Topic to subscribe to
- */
- public void subscribe(String topic) {
- String[] topics = {topic};
- subscribe(topics);
- }
-
- /**
- * Subscribe to multiple topics with quality of service
- * {@link se.wetcat.qatja.MQTTConstants#AT_MOST_ONCE}
- *
- * @param topics Topics to subscribe to
- */
- public void subscribe(String[] topics) {
- byte[] qoss = new byte[topics.length];
- for (int i = 0; i < qoss.length; i++)
- qoss[i] = AT_MOST_ONCE;
- subscribe(topics, qoss);
- }
-
- /**
- * Subscribe to a topic
- *
- * @param topic Topic to subscribe to
- * @param qos Quality of service, can be {@link se.wetcat.qatja.MQTTConstants#AT_MOST_ONCE},
- * {@link se.wetcat.qatja.MQTTConstants#AT_LEAST_ONCE}, or
- * {@link se.wetcat.qatja.MQTTConstants#EXACTLY_ONCE}.
- */
- public void subscribe(String topic, byte qos) {
- String[] topics = {topic};
- byte[] qoss = {qos};
- subscribe(topics, qoss);
- }
-
- /**
- * Subscribe to multiple topics
- *
- * @param topics Topic to subscribe to
- * @param qoss Quality of service, can be {@link se.wetcat.qatja.MQTTConstants#AT_MOST_ONCE},
- * {@link se.wetcat.qatja.MQTTConstants#AT_LEAST_ONCE}, or
- * {@link se.wetcat.qatja.MQTTConstants#EXACTLY_ONCE}.
- */
- public void subscribe(String[] topics, byte[] qoss) {
- // Ensure the subscribedTopics isn't null
- if (subscribedTopics == null)
- subscribedTopics = new HashSet<>();
-
- for(int i = 0; i < topics.length; i++) {
- HashSet<String> newTopics = new HashSet<>();
-
- if(!subscribedTopics.contains(topics[i])) {
- newTopics.add(topics[i]);
- }
- topics = newTopics.toArray(new String[0]);
+ /**
+ * Publish a message to a specified topic.
+ *
+ * @param topic Topic to publish to
+ * @param message Message to publish
+ * @param qos Quality of service to publish as
+ */
+ public void publish(String topic, String message, byte qos) {
+ publish(topic, message.getBytes(), qos);
}
- if(topics.length == 0) {
- return;
+ /**
+ * Publish a message (byte[]) to a specified topic.
+ *
+ * @param topic the topic
+ * @param payload the message
+ * @param qos the desired quality of service
+ */
+ public void publish(String topic, byte[] payload, byte qos) {
+ MQTTPublish publish = MQTTPublish.newInstance(topic, payload, qos, mMqttIdentifierHelper.getIdentifier());
+ sendMessage(publish);
}
- int id = mMqttIdentifierHelper.getIdentifier();
-
- MQTTSubscribe subscribe = MQTTSubscribe.newInstance(topics, qoss, id);
- sendMessage(subscribe);
-
- subscribedTopics.addAll(Arrays.asList(topics));
-
- mMqttIdentifierHelper.addSentPackage(subscribe);
- }
-
- // public synchronized void start() {
- // if (DEBUG)
- // Log.d(TAG, "start");
- //
- // // Cancel any thread attempting to make a connection
- // if (mConnectThread != null) {
- // mConnectThread.cancel();
- // mConnectThread = null;
- // }
- //
- // // Cancel any thread currently running a connection
- // if (mConnectedThread != null) {
- // mConnectedThread.cancel();
- // mConnectedThread = null;
- // }
- //
- // setState(STATE_NONE);
- //
- // // if (host != null)
- // // connect(host, port);
- // }
-
- public synchronized void sendMessage(MQTTMessage msg) {
- sendMessage(msg, true);
- }
-
- public synchronized void sendMessage(MQTTMessage msg, boolean mustBeConnected) {
- if (DEBUG)
- Log.d(TAG, "Sending message: " + MQTTHelper.decodePackageName(msg));
-
- if (mustBeConnected) {
- if (getState() == STATE_CONNECTED) {
- new WriterTask().execute(msg);
- } else {
- if (DEBUG)
- Log.d(TAG, "Need to be connected to send " + MQTTHelper.decodePackageName(msg));
+ /**
+ * Publish a retained message to a specified topic.
+ *
+ * @param topic the topic
+ * @param message the message
+ * @param qos the desired quality of service
+ */
+ public void publishRetain(String topic, String message, byte qos) {
+ publishRetain(topic, message.getBytes(), qos);
+ }
- // If we lost the connection, and reconnect is set, let's try to reconnect now!
- if (doAutomaticReconnect)
- reconnect();
- }
- } else {
- new WriterTask().execute(msg);
+ /**
+ * Publish a retained message to a specified topic.
+ *
+ * @param topic the topic
+ * @param payload the message to publish
+ * @param qos the desired quality of service
+ */
+ public void publishRetain(String topic, byte[] payload, byte qos) {
+ MQTTPublish publish = MQTTPublish.newInstance(topic, payload, qos);
+ publish.setRetain(true);
+ sendMessage(publish);
}
+ /**
+ * Subscribe to a topic with Quality of Service (QoS) level
+ * {@link se.wetcat.qatja.MQTTConstants#AT_MOST_ONCE}
+ *
+ * @param topic Topic to subscribe to
+ */
+ public void subscribe(String topic) {
+ String[] topics = {topic};
+ subscribe(topics);
+ }
+
+ /**
+ * Subscribe to multiple topics with quality of service
+ * {@link se.wetcat.qatja.MQTTConstants#AT_MOST_ONCE}
+ *
+ * @param topics Topics to subscribe to
+ */
+ public void subscribe(String[] topics) {
+ byte[] qoss = new byte[topics.length];
+ for (int i = 0; i < qoss.length; i++)
+ qoss[i] = AT_MOST_ONCE;
+ subscribe(topics, qoss);
+ }
+
+ /**
+ * Subscribe to a topic
+ *
+ * @param topic Topic to subscribe to
+ * @param qos Quality of service, can be {@link se.wetcat.qatja.MQTTConstants#AT_MOST_ONCE},
+ * {@link se.wetcat.qatja.MQTTConstants#AT_LEAST_ONCE}, or
+ * {@link se.wetcat.qatja.MQTTConstants#EXACTLY_ONCE}.
+ */
+ public void subscribe(String topic, byte qos) {
+ String[] topics = {topic};
+ byte[] qoss = {qos};
+ subscribe(topics, qoss);
+ }
+
+ /**
+ * Subscribe to multiple topics
+ *
+ * @param topics Topic to subscribe to
+ * @param qoss Quality of service, can be {@link se.wetcat.qatja.MQTTConstants#AT_MOST_ONCE},
+ * {@link se.wetcat.qatja.MQTTConstants#AT_LEAST_ONCE}, or
+ * {@link se.wetcat.qatja.MQTTConstants#EXACTLY_ONCE}.
+ */
+ public void subscribe(String[] topics, byte[] qoss) {
+ // Ensure the subscribedTopics isn't null
+ if (subscribedTopics == null)
+ subscribedTopics = new HashSet<>();
+
+ for (int i = 0; i < topics.length; i++) {
+ HashSet<String> newTopics = new HashSet<>();
+
+ if (!subscribedTopics.contains(topics[i])) {
+ newTopics.add(topics[i]);
+ }
+ topics = newTopics.toArray(new String[0]);
+ }
+
+ if (topics.length == 0) {
+ return;
+ }
+
+ int id = mMqttIdentifierHelper.getIdentifier();
+
+ MQTTSubscribe subscribe = MQTTSubscribe.newInstance(topics, qoss, id);
+ sendMessage(subscribe);
+
+ subscribedTopics.addAll(Arrays.asList(topics));
+
+ mMqttIdentifierHelper.addSentPackage(subscribe);
+ }
+
+ // public synchronized void start() {
+ // if (DEBUG)
+ // Log.d(TAG, "start");
+ //
+ // // Cancel any thread attempting to make a connection
+ // if (mConnectThread != null) {
+ // mConnectThread.cancel();
+ // mConnectThread = null;
+ // }
+ //
+ // // Cancel any thread currently running a connection
+ // if (mConnectedThread != null) {
+ // mConnectedThread.cancel();
+ // mConnectedThread = null;
+ // }
+ //
+ // setState(STATE_NONE);
+ //
+ // // if (host != null)
+ // // connect(host, port);
+ // }
+
+ public synchronized void sendMessage(MQTTMessage msg) {
+ sendMessage(msg, true);
+ }
+
+ public synchronized void sendMessage(MQTTMessage msg, boolean mustBeConnected) {
+ if (DEBUG)
+ Log.d(TAG, "Sending message: " + MQTTHelper.decodePackageName(msg));
+
+ if (mustBeConnected) {
+ if (getState() == STATE_CONNECTED) {
+ new WriterTask().execute(msg);
+ } else {
+ if (DEBUG)
+ Log.d(TAG, "Need to be connected to send " + MQTTHelper.decodePackageName(msg));
+
+ // If we lost the connection, and reconnect is set, let's try to reconnect now!
+ if (doAutomaticReconnect)
+ reconnect();
+ }
+ } else {
+ new WriterTask().execute(msg);
+ }
+
// if (mustBeConnected) {
// if (getState() == STATE_CONNECTED) {
// Log.e(TAG, "FAiled to send message " + MQTTHelper.decodePackageName(msg.getType()), e);
// }
// }
- }
-
- public String[] getSubscribedTopics() {
- if(subscribedTopics == null) {
- return new String[]{};
}
- return subscribedTopics.toArray(new String[0]);
- }
-
- public void setSSLSocketFactory(SSLSocketFactory socketFactory) {
- this.socketFactory = socketFactory;
- }
-
- /**
- * Set MQTT broker host, can be either a domain name or an ip address
- *
- * @param host the host
- */
- public void setHost(String host) {
- this.host = host;
- }
-
- /**
- * Set MQTT broker port
- *
- * @param port
- */
- public void setPort(int port) {
- this.port = port;
- }
-
- /**
- * Set client identifier
- *
- * @param clientIdentifier the identifier
- */
- public void setIdentifier(String clientIdentifier) {
- this.clientIdentifier = clientIdentifier;
- }
-
- public void setUsername(String username) { this.mUsername = username; }
-
- public void setPassword(String password) { this.mPassword = password; }
-
- public void setProtocolName(String protocolName) {
- this.protocolName = protocolName;
- }
-
- /**
- * Set clean session
- *
- * @param clean_session
- */
- public void setCleanSession(boolean clean_session) {
- this.cleanSession = clean_session;
- }
-
- /**
- * Set will
- *
- * @param topic the will topic
- * @param message the will message
- */
- public void setWill(String topic, String message) {
- if (topic == null || message == null) {
- willFlag = false;
- } else {
- willTopic = topic;
- willMessage = message;
- willFlag = true;
- }
- }
-
- /**
- * Set automatic reconnect
- *
- * @param reconnect
- */
- public void setReconnect(boolean reconnect) {
- doAutomaticReconnect = reconnect;
- }
-
- public void setReconnectDelay(long millis) {
- mReconnectDelay = millis;
- }
-
- /**
- * Attempt to reconnect after {@link #mReconnectDelay} milliseconds
- */
- public void reconnect() {
- reconnectHandler.postDelayed(recoonectRunnable, mReconnectDelay);
- }
-
- /**
- * Attempt to reconnect after delay
- *
- * @param milliseconds the delay
- */
- public void reconnect(long milliseconds) {
- reconnectHandler.postDelayed(recoonectRunnable, milliseconds);
- }
-
- /**
- * This runnable will take care of sending a ping request, it will be automatically cancelled and
- * rescheduled if another message was sent to the broker (as defined in MQTT spec 3.1.1 we're not
- * required to send ping as long as another message has been sent within the specified period.
- */
- private Runnable mPingSender = new Runnable() {
- @Override
- public void run() {
- sendMessage(MQTTPingreq.newInstance());
- // Make sure to auto-queue the runnable again when the message has been sent.
- mKeepaliveHandler.postDelayed(mPingSender, KEEP_ALIVE_TIMER);
+ public String[] getSubscribedTopics() {
+ if (subscribedTopics == null) {
+ return new String[]{};
+ }
+ return subscribedTopics.toArray(new String[0]);
}
- };
-
- /**
- * Start a connection attempt
- */
- public synchronized void connect() {
- if (DEBUG)
- Log.d(TAG, "connect to: " + host);
-
- cleanUp();
- // Start the thread to connect with the given device
- try {
- mConnectThread = new ConnectThread(host, port);
- mConnectThread.start();
+ public void setSSLSocketFactory(SSLSocketFactory socketFactory) {
+ this.socketFactory = socketFactory;
+ }
- setState(STATE_CONNECTING);
- } catch (Exception e) {
- Log.e(TAG, e.getMessage(), e);
+ /**
+ * Set MQTT broker host, can be either a domain name or an ip address
+ *
+ * @param host the host
+ */
+ public void setHost(String host) {
+ this.host = host;
+ }
- setState(STATE_CONNECTION_FAILED);
+ /**
+ * Set MQTT broker port
+ *
+ * @param port
+ */
+ public void setPort(int port) {
+ this.port = port;
}
- }
-
- public synchronized void connect(boolean newSocket) {
- if (DEBUG)
- Log.d(TAG, "connect to: " + host);
- if (newSocket) {
- // Cancel any future ping requests
- if (mKeepaliveHandler != null) {
- mKeepaliveHandler.removeCallbacks(mPingSender);
- mKeepaliveHandler = null;
- }
-
- // Cancel any thread attempting to make a connection
- if (getState() == STATE_CONNECTING) {
- if (mConnectThread != null) {
- mConnectThread.cancel();
- mConnectThread = null;
- }
- }
- // Cancel any thread currently running a connection
- if (mConnectedThread != null) {
- mConnectedThread.cancel();
- mConnectedThread = null;
- }
+ /**
+ * Set client identifier
+ *
+ * @param clientIdentifier the identifier
+ */
+ public void setIdentifier(String clientIdentifier) {
+ this.clientIdentifier = clientIdentifier;
+ }
- if(subscribedTopics != null) {
- subscribedTopics.clear();
- }
+ public void setUsername(String username) {
+ this.mUsername = username;
+ }
- // Start the thread to connect with the given device
- try {
- mConnectThread = new ConnectThread(host, port);
- mConnectThread.start();
+ public void setPassword(String password) {
+ this.mPassword = password;
+ }
- setState(STATE_CONNECTING);
- } catch (Exception e) {
- Log.e(TAG, e.getMessage(), e);
+ public void setProtocolName(String protocolName) {
+ this.protocolName = protocolName;
+ }
- setState(STATE_CONNECTION_FAILED);
- }
- } else {
- setState(STATE_CONNECTING);
+ /**
+ * Set clean session
+ *
+ * @param clean_session
+ */
+ public void setCleanSession(boolean clean_session) {
+ this.cleanSession = clean_session;
+ }
- connect(clientIdentifier);
+ /**
+ * Set will
+ *
+ * @param topic the will topic
+ * @param message the will message
+ */
+ public void setWill(String topic, String message) {
+ if (topic == null || message == null) {
+ willFlag = false;
+ } else {
+ willTopic = topic;
+ willMessage = message;
+ willFlag = true;
+ }
}
- }
-
- /**
- * Service connected
- *
- * @param socket the connected socket
- */
- private synchronized void connected(Socket socket) {
- if (DEBUG)
- Log.d(TAG, "connected, Socket Type:");
-
- // Cancel any future ping requests
- if (mKeepaliveHandler != null) {
- mKeepaliveHandler.removeCallbacks(mPingSender);
- mKeepaliveHandler = null;
+
+ /**
+ * Set automatic reconnect
+ *
+ * @param reconnect
+ */
+ public void setReconnect(boolean reconnect) {
+ doAutomaticReconnect = reconnect;
}
- // Cancel the thread that completed the connection
- if (mConnectThread != null) {
- mConnectThread.cancel();
- mConnectThread = null;
+ public void setReconnectDelay(long millis) {
+ mReconnectDelay = millis;
}
- // Cancel any thread currently running a connection
- if (mConnectedThread != null) {
- mConnectedThread.cancel();
- mConnectedThread = null;
+ /**
+ * Attempt to reconnect after {@link #mReconnectDelay} milliseconds
+ */
+ public void reconnect() {
+ reconnectHandler.postDelayed(recoonectRunnable, mReconnectDelay);
}
- if(subscribedTopics != null) {
- subscribedTopics.clear();
+ /**
+ * Attempt to reconnect after delay
+ *
+ * @param milliseconds the delay
+ */
+ public void reconnect(long milliseconds) {
+ reconnectHandler.postDelayed(recoonectRunnable, milliseconds);
}
- // Start the thread to manage the connection and perform transmissions
- mConnectedThread = new ConnectedThread(socket);
- mConnectedThread.start();
+ /**
+ * This runnable will take care of sending a ping request, it will be automatically cancelled and
+ * rescheduled if another message was sent to the broker (as defined in MQTT spec 3.1.1 we're not
+ * required to send ping as long as another message has been sent within the specified period.
+ */
+ private Runnable mPingSender = new Runnable() {
+ @Override
+ public void run() {
+ sendMessage(MQTTPingreq.newInstance());
- // Start the PINGREQ handler
- mKeepaliveHandler = new Handler(getMainLooper());
- mKeepaliveHandler.postDelayed(mPingSender, KEEP_ALIVE_TIMER);
+ // Make sure to auto-queue the runnable again when the message has been sent.
+ mKeepaliveHandler.postDelayed(mPingSender, KEEP_ALIVE_TIMER);
+ }
+ };
- Log.d(TAG, "Sending connect message");
+ /**
+ * Start a connection attempt
+ */
+ public synchronized void connect() {
+ if (DEBUG)
+ Log.d(TAG, "connect to: " + host);
- // Send the connect message
- connect(clientIdentifier);
+ cleanUp();
- // setState(STATE_CONNECTED);
- }
+ // Start the thread to connect with the given device
+ try {
+ mConnectThread = new ConnectThread(host, port);
+ mConnectThread.start();
- /**
- * Indicate that the connection attempt failed and notify the UI Activity.
- */
- private void connectionFailed(Exception e) {
- if (DEBUG)
- Log.d(TAG, "connectionFailed", e);
+ setState(STATE_CONNECTING);
+ } catch (Exception e) {
+ Log.e(TAG, e.getMessage(), e);
- if(subscribedTopics != null) {
- subscribedTopics.clear();
+ setState(STATE_CONNECTION_FAILED);
+ }
}
- if (doAutomaticReconnect)
- reconnect();
-
- setState(STATE_CONNECTION_FAILED);
- }
+ public synchronized void connect(boolean newSocket) {
+ if (DEBUG)
+ Log.d(TAG, "connect to: " + host);
+ if (newSocket) {
+ // Cancel any future ping requests
+ if (mKeepaliveHandler != null) {
+ mKeepaliveHandler.removeCallbacks(mPingSender);
+ mKeepaliveHandler = null;
+ }
- /**
- * Indicate that the connection was lost and notify the UI Activity.
- */
- private void connectionLost() {
- if (DEBUG)
- Log.d(TAG, "connectionLost");
+ // Cancel any thread attempting to make a connection
+ if (getState() == STATE_CONNECTING) {
+ if (mConnectThread != null) {
+ mConnectThread.cancel();
+ mConnectThread = null;
+ }
+ }
- cleanUp();
+ // Cancel any thread currently running a connection
+ if (mConnectedThread != null) {
+ mConnectedThread.cancel();
+ mConnectedThread = null;
+ }
- setState(STATE_NONE);
+ if (subscribedTopics != null) {
+ subscribedTopics.clear();
+ }
- if (doAutomaticReconnect)
- reconnect();
- }
+ // Start the thread to connect with the given device
+ try {
+ mConnectThread = new ConnectThread(host, port);
+ mConnectThread.start();
- /**
- * Disconnect the MQTT service
- */
- public void disconnect() {
- if (mState == STATE_CONNECTED) {
- sendMessage(MQTTDisconnect.newInstance());
- }
- }
-
- /**
- * Clean up the connection handling.
- */
- private void cleanUp() {
- if (DEBUG) {
- Log.d(TAG, "cleanUp()");
- }
+ setState(STATE_CONNECTING);
+ } catch (Exception e) {
+ Log.e(TAG, e.getMessage(), e);
- // Cancel any future ping requests
- try {
- if (mKeepaliveHandler != null) {
- mKeepaliveHandler.removeCallbacks(mPingSender);
- mKeepaliveHandler = null;
- }
- } catch (Exception e) {
- Log.e(TAG, e.getMessage(), e);
- }
+ setState(STATE_CONNECTION_FAILED);
+ }
+ } else {
+ setState(STATE_CONNECTING);
- // Cancel the thread that completed the connection
- if (mConnectThread != null) {
- mConnectThread.cancel();
- mConnectThread = null;
+ connect(clientIdentifier);
+ }
}
- // Cancel any thread currently running a connection
- if (mConnectedThread != null) {
- mConnectedThread.cancel();
- mConnectedThread = null;
- }
+ /**
+ * Service connected
+ *
+ * @param socket the connected socket
+ */
+ private synchronized void connected(Socket socket) {
+ if (DEBUG)
+ Log.d(TAG, "connected, Socket Type:");
- try {
- if (subscribedTopics != null) {
- subscribedTopics.clear();
- }
- } catch (Exception e) {
- Log.e(TAG, e.getMessage(), e);
- }
- }
+ // Cancel any future ping requests
+ if (mKeepaliveHandler != null) {
+ mKeepaliveHandler.removeCallbacks(mPingSender);
+ mKeepaliveHandler = null;
+ }
- /**
- * Set the connection state
- *
- * @param state the state
- */
- private synchronized void setState(int state) {
- if (DEBUG)
- Log.d(TAG, "setState() " + mState + " -> " + state);
+ // Cancel the thread that completed the connection
+ if (mConnectThread != null) {
+ mConnectThread.cancel();
+ mConnectThread = null;
+ }
- if (mState != state) {
- mState = state;
+ // Cancel any thread currently running a connection
+ if (mConnectedThread != null) {
+ mConnectedThread.cancel();
+ mConnectedThread = null;
+ }
- if (mHandler != null) {
- if (mStateListener != null) {
- mStateListener.onStateChanged(state);
+ if (subscribedTopics != null) {
+ subscribedTopics.clear();
}
- // Give the new state to the Handler so the UI Activity can
- // update
- mHandler.obtainMessage(STATE_CHANGE, state, -1).sendToTarget();
- }
+ // Start the thread to manage the connection and perform transmissions
+ mConnectedThread = new ConnectedThread(socket);
+ mConnectedThread.start();
+
+ // Start the PINGREQ handler
+ mKeepaliveHandler = new Handler(getMainLooper());
+ mKeepaliveHandler.postDelayed(mPingSender, KEEP_ALIVE_TIMER);
+
+ Log.d(TAG, "Sending connect message");
+
+ // Send the connect message
+ connect(clientIdentifier);
+
+ // setState(STATE_CONNECTED);
}
- }
-
- /**
- * Get the connection state
- *
- * @return the state
- */
- public synchronized int getState() {
- return mState;
- }
-
- /**
- * Set keep alive timer in milliseconds
- *
- * @param milliseconds the time
- */
- public void setKeepAlive(int milliseconds) {
- KEEP_ALIVE_TIMER = milliseconds;
- }
-
- /**
- * Make sure to resend packages that haven't been successfully sent.
- */
- private synchronized void resendPackages() {
- for (MQTTMessage msg : mMqttIdentifierHelper.getSentPackages().values()) {
- if (msg instanceof MQTTPublish) {
- ((MQTTPublish) msg).setDup();
- }
- sendMessage(msg);
+
+ /**
+ * Indicate that the connection attempt failed and notify the UI Activity.
+ */
+ private void connectionFailed(Exception e) {
+ if (DEBUG)
+ Log.d(TAG, "connectionFailed", e);
+
+ if (subscribedTopics != null) {
+ subscribedTopics.clear();
+ }
+
+ if (doAutomaticReconnect)
+ reconnect();
+
+ setState(STATE_CONNECTION_FAILED);
}
- for (MQTTMessage msg : mMqttIdentifierHelper.getReceivedPackages().values()) {
- if (msg instanceof MQTTPublish) {
- ((MQTTPublish) msg).setDup();
- }
- sendMessage(msg);
+ /**
+ * Indicate that the connection was lost and notify the UI Activity.
+ */
+ private void connectionLost() {
+ if (DEBUG)
+ Log.d(TAG, "connectionLost");
+
+ cleanUp();
+
+ setState(STATE_NONE);
+
+ if (doAutomaticReconnect)
+ reconnect();
}
- }
- private synchronized void handlePubmesage(MQTTPuback msg) {
-
- Log.d(TAG, "Success handlePubmesage to " + new String(msg.getPayload()));
- }
- /**
- * Manages subscription messages
- *
- * @param msg the message to handle
- */
- private synchronized void handleSubscriptions(MQTTMessage msg) {
- if (msg instanceof MQTTSuback) {
- MQTTSuback suback = (MQTTSuback) msg;
-
- MQTTSubscribe subscribe = (MQTTSubscribe) mMqttIdentifierHelper.getSentPackages().get(suback.getPackageIdentifier());
-
- String[] topicFilters = subscribe.getTopicFilters();
- byte[] qoss = suback.getPayload();
- for (int i = 0; i < qoss.length; i++) {
- switch (qoss[i]) {
- case SUBSCRIBE_SUCCESS_AT_MOST_ONCE:
- case SUBSCRIBE_SUCCESS_AT_LEAST_ONCE:
- case SUBSCRIBE_SUCCESS_EXACTLY_ONCE:
- Log.d(TAG, "Success subscribing to " + topicFilters[i]);
- break;
-
- case SUBSCRIBE_FAILURE:
- Log.d(TAG, "Failed subscribing to " + topicFilters[i]);
- break;
+
+ /**
+ * Disconnect the MQTT service
+ */
+ public void disconnect() {
+ if (mState == STATE_CONNECTED) {
+ sendMessage(MQTTDisconnect.newInstance());
}
- }
- } else if (msg instanceof MQTTUnsuback) {
- MQTTUnsuback unsuback = (MQTTUnsuback) msg;
-
- MQTTUnsubscribe unsubscribe = (MQTTUnsubscribe) mMqttIdentifierHelper.getSentPackages().get(unsuback.getPackageIdentifier());
- String[] topicFilters = unsubscribe.getTopicFilters();
- for (int i = 0; i < topicFilters.length; i++) {
- Log.d(TAG, "Success unsubscribing to " + topicFilters[i]);
- }
}
- mHandler.obtainMessage(msg.getType(), -1, -1, msg).sendToTarget();
- }
+ /**
+ * Clean up the connection handling.
+ */
+ private void cleanUp() {
+ if (DEBUG) {
+ Log.d(TAG, "cleanUp()");
+ }
+
+ // Cancel any future ping requests
+ try {
+ if (mKeepaliveHandler != null) {
+ mKeepaliveHandler.removeCallbacks(mPingSender);
+ mKeepaliveHandler = null;
+ }
+ } catch (Exception e) {
+ Log.e(TAG, e.getMessage(), e);
+ }
+
+ // Cancel the thread that completed the connection
+ if (mConnectThread != null) {
+ mConnectThread.cancel();
+ mConnectThread = null;
+ }
- private class ConnectThread extends Thread {
- private static final String TAG = "ConnectThread";
+ // Cancel any thread currently running a connection
+ if (mConnectedThread != null) {
+ mConnectedThread.cancel();
+ mConnectedThread = null;
+ }
- private final Socket mmSocket;
+ try {
+ if (subscribedTopics != null) {
+ subscribedTopics.clear();
+ }
+ } catch (Exception e) {
+ Log.e(TAG, e.getMessage(), e);
+ }
+ }
/**
- * Timeout of connection attempts (ms)
+ * Set the connection state
+ *
+ * @param state the state
*/
- private int timeout = 3000;
+ private synchronized void setState(int state) {
+ if (DEBUG)
+ Log.d(TAG, "setState() " + mState + " -> " + state);
- private InetSocketAddress remoteAddr;
+ if (mState != state) {
+ mState = state;
- ConnectThread(String host, int port) throws IOException {
- if (DEBUG)
- Log.d(TAG, "CREATE mConnectThread ");
+ if (mHandler != null) {
+ if (mStateListener != null) {
+ mStateListener.onStateChanged(state);
+ }
- if (socketFactory != null) {
- mmSocket = socketFactory.createSocket();
- } else {
- mmSocket = new Socket();
- }
+ // Give the new state to the Handler so the UI Activity can
+ // update
+ mHandler.obtainMessage(STATE_CHANGE, state, -1).sendToTarget();
+ }
+ }
}
- public void run() {
- if (DEBUG)
- Log.d(TAG, "BEGIN mConnectThread");
+ /**
+ * Get the connection state
+ *
+ * @return the state
+ */
+ public synchronized int getState() {
+ return mState;
+ }
- setName("ConnectThread");
+ /**
+ * Set keep alive timer in milliseconds
+ *
+ * @param milliseconds the time
+ */
+ public void setKeepAlive(int milliseconds) {
+ KEEP_ALIVE_TIMER = milliseconds;
+ }
- remoteAddr = new InetSocketAddress(host, port);
+ /**
+ * Make sure to resend packages that haven't been successfully sent.
+ */
+ private synchronized void resendPackages() {
+ for (MQTTMessage msg : mMqttIdentifierHelper.getSentPackages().values()) {
+ if (msg instanceof MQTTPublish) {
+ ((MQTTPublish) msg).setDup();
+ }
+ sendMessage(msg);
+ }
- // Make a connection to the Socket
- try {
- // This is a blocking call and will only return on a successful connection or an exception
- mmSocket.connect(remoteAddr, timeout);
- } catch (IOException e) {
- // Close the socket
- try {
- mmSocket.close();
- } catch (IOException e2) {
- Log.e(TAG,
- "unable to close() socket during connection failure",
- e2);
+ for (MQTTMessage msg : mMqttIdentifierHelper.getReceivedPackages().values()) {
+ if (msg instanceof MQTTPublish) {
+ ((MQTTPublish) msg).setDup();
+ }
+ sendMessage(msg);
}
- connectionFailed(e);
- return;
- }
+ }
- // Reset the ConnectThread because we're done
- synchronized (this) {
- mConnectThread = null;
- }
+ private synchronized void handlePubmesage(MQTTPuback msg) {
- // Start the connected thread
- connected(mmSocket);
+ Log.d(TAG, "Success handlePubmesage to " + new String(msg.getPayload()));
}
- public void cancel() {
- try {
- mmSocket.close();
- } catch (IOException e) {
- Log.e(TAG, "close() of connect socket failed", e);
- }
- }
- }
-
- /**
- * This thread runs during a connection with a remote device. It handles all incoming and outgoing
- * transmissions.
- */
- private class ConnectedThread extends Thread {
- private final Socket mmSocket;
- private final InputStream mmInStream;
- private final OutputStream mmOutStream;
-
- public ConnectedThread(Socket socket) {
- if (DEBUG)
- Log.d(TAG, "CREATE mConnectedThread");
-
- mmSocket = socket;
- InputStream tmpIn = null;
- OutputStream tmpOut = null;
-
- // Get the Socket input and output streams
- try {
- tmpIn = socket.getInputStream();
- tmpOut = socket.getOutputStream();
- } catch (IOException e) {
- Log.e(TAG, "temp sockets not created", e);
- }
-
- mmInStream = tmpIn;
- mmOutStream = tmpOut;
-
- if (DEBUG)
- Log.d(TAG, "BEGIN mConnectedThread");
+ /**
+ * Manages subscription messages
+ *
+ * @param msg the message to handle
+ */
+ private synchronized void handleSubscriptions(MQTTMessage msg) {
+ if (msg instanceof MQTTSuback) {
+ MQTTSuback suback = (MQTTSuback) msg;
+
+ MQTTSubscribe subscribe = (MQTTSubscribe) mMqttIdentifierHelper.getSentPackages().get(suback.getPackageIdentifier());
+
+ String[] topicFilters = subscribe.getTopicFilters();
+ byte[] qoss = suback.getPayload();
+ for (int i = 0; i < qoss.length; i++) {
+ switch (qoss[i]) {
+ case SUBSCRIBE_SUCCESS_AT_MOST_ONCE:
+ case SUBSCRIBE_SUCCESS_AT_LEAST_ONCE:
+ case SUBSCRIBE_SUCCESS_EXACTLY_ONCE:
+ Log.d(TAG, "Success subscribing to " + topicFilters[i]);
+ break;
+
+ case SUBSCRIBE_FAILURE:
+ Log.d(TAG, "Failed subscribing to " + topicFilters[i]);
+ break;
+ }
+ }
+ } else if (msg instanceof MQTTUnsuback) {
+ MQTTUnsuback unsuback = (MQTTUnsuback) msg;
+
+ MQTTUnsubscribe unsubscribe = (MQTTUnsubscribe) mMqttIdentifierHelper.getSentPackages().get(unsuback.getPackageIdentifier());
+ String[] topicFilters = unsubscribe.getTopicFilters();
+ for (int i = 0; i < topicFilters.length; i++) {
+ Log.d(TAG, "Success unsubscribing to " + topicFilters[i]);
+ }
+ }
+
+ mHandler.obtainMessage(msg.getType(), -1, -1, msg).sendToTarget();
}
- public void run() {
- int len;
- byte[] buffer = new byte[16384];
+ private class ConnectThread extends Thread {
+ private static final String TAG = "ConnectThread";
- // Keep listening to the InputStream while connected
- while (!isInterrupted()) {
- try {
- // Read from the InputStream
- len = mmInStream.read(buffer);
-
- if (mHandler != null)
-
- if (len > 0) {
- byte type = MQTTHelper.decodeType(buffer);
-
- if (DEBUG)
- Log.d(TAG, "Received " + MQTTHelper.decodePackageName(type));
-
- // Handle automatic responses here
- switch (type) {
- case CONNECT:
- // Client should never receive CONNECT message
- break;
-
- case CONNACK:
- MQTTConnack connack = MQTTConnack.fromBuffer(buffer);
-
- switch (connack.getReturnCode()) {
- case CONNECTION_ACCEPTED:
- if (DEBUG)
- Log.d(TAG, "Connected");
- setState(STATE_CONNECTED);
- break;
-
- case CONNECTION_REFUSED_VERSION:
- if (DEBUG)
- Log.d(TAG, "Failed to connect, unaccebtable protocol version");
- setState(STATE_CONNECTION_FAILED);
- break;
-
- case CONNECTION_REFUSED_IDENTIFIER:
- if (DEBUG)
- Log.d(TAG, "Failed to connect, identifier rejected");
- setState(STATE_CONNECTION_FAILED);
- break;
-
- case CONNECTION_REFUSED_SERVER:
- if (DEBUG)
- Log.d(TAG, "Failed to connect, server unavailable");
- setState(STATE_CONNECTION_FAILED);
- break;
-
- case CONNECTION_REFUSED_USER:
- if (DEBUG)
- Log.d(TAG, "Failed to connect, bad username or password");
- setState(STATE_CONNECTION_FAILED);
- break;
-
- case CONNECTION_REFUSED_AUTH:
- if (DEBUG)
- Log.d(TAG, "Failed to connect, not authorized");
- setState(STATE_CONNECTION_FAILED);
- break;
- }
- break;
-
- case PUBLISH:
- MQTTPublish publish = MQTTPublish.fromBuffer(buffer);
- switch (publish.getQoS()) {
- case AT_MOST_ONCE:
- // Do nothing
- break;
-
- case AT_LEAST_ONCE:
- // Send PUBACK
- MQTTPuback puback_ = MQTTPuback.newInstance(publish.getPackageIdentifier());
- sendMessage(puback_);
- break;
-
- case EXACTLY_ONCE:
- // Send PUBREC and store message
- MQTTPubrec pubrec_ = MQTTPubrec.newInstance(publish.getPackageIdentifier());
- mMqttIdentifierHelper.addReceivedPackage(pubrec_);
- sendMessage(pubrec_);
-
- mMqttIdentifierHelper.addSentPackage(pubrec_);
- break;
- }
- mHandler.obtainMessage(PUBLISH, mState, -1, publish).sendToTarget();
- break;
-
- case PUBACK:
- MQTTPuback puback = MQTTPuback.fromBuffer(buffer);
- mMqttIdentifierHelper.removeSentPackage(puback);
- handlePubmesage(puback);
- break;
-
- case PUBREC:
- MQTTPubrec pubrec = MQTTPubrec.fromBuffer(buffer);
- int packageIdentifier = pubrec.getPackageIdentifier();
- mMqttIdentifierHelper.removeSentPackage(pubrec);
-
- MQTTPubrel pubrel_ = MQTTPubrel.newInstance(packageIdentifier);
- sendMessage(pubrel_);
- break;
-
- case PUBREL:
- MQTTPubrel pubrel = MQTTPubrel.fromBuffer(buffer);
- mMqttIdentifierHelper.removeReceivedPackage(pubrel);
-
- MQTTPubcomp pubcomp_ = MQTTPubcomp.newInstance(pubrel.getPackageIdentifier());
- sendMessage(pubcomp_);
- break;
-
- case PUBCOMP:
- MQTTPubcomp pubcomp = MQTTPubcomp.fromBuffer(buffer);
- mMqttIdentifierHelper.removeReceivedPackage(pubcomp);
- break;
-
- case SUBSCRIBE:
- // Client doesn't receive this message
- break;
-
- case SUBACK:
- MQTTSuback suback = MQTTSuback.fromBuffer(buffer);
- handleSubscriptions(suback);
- break;
-
- case UNSUBSCRIBE:
- // Client doesn't receive this message
- break;
-
- case UNSUBACK:
- MQTTUnsuback unsuback = MQTTUnsuback.fromBuffer(buffer);
- handleSubscriptions(unsuback);
- mMqttIdentifierHelper.removeSentPackage(unsuback);
- break;
-
- case PINGREQ:
- // Client doesn't receive this message
- break;
-
- case PINGRESP:
- lastPingResp = System.currentTimeMillis();
- break;
-
- case DISCONNECT:
- // Client doesn't receive this message
- break;
- }
+ private final Socket mmSocket;
+
+ /**
+ * Timeout of connection attempts (ms)
+ */
+ private int timeout = 3000;
+
+ private InetSocketAddress remoteAddr;
+
+ ConnectThread(String host, int port) throws IOException {
+ if (DEBUG)
+ Log.d(TAG, "CREATE mConnectThread ");
+
+ if (socketFactory != null) {
+ mmSocket = socketFactory.createSocket();
+ } else {
+ mmSocket = new Socket();
}
+ }
- } catch (IOException e) {
- if (DEBUG)
- Log.e(TAG, "disconnected (this is fine, expected almost)", e);
+ public void run() {
+ if (DEBUG)
+ Log.d(TAG, "BEGIN mConnectThread");
+
+ setName("ConnectThread");
+
+ remoteAddr = new InetSocketAddress(host, port);
+
+ // Make a connection to the Socket
+ try {
+ // This is a blocking call and will only return on a successful connection or an exception
+ mmSocket.connect(remoteAddr, timeout);
+ } catch (IOException e) {
+ // Close the socket
+ try {
+ mmSocket.close();
+ } catch (IOException e2) {
+ Log.e(TAG,
+ "unable to close() socket during connection failure",
+ e2);
+ }
+ connectionFailed(e);
+ return;
+ }
- connectionLost();
+ // Reset the ConnectThread because we're done
+ synchronized (this) {
+ mConnectThread = null;
+ }
- break;
+ // Start the connected thread
+ connected(mmSocket);
+ }
+
+ public void cancel() {
+ try {
+ mmSocket.close();
+ } catch (IOException e) {
+ Log.e(TAG, "close() of connect socket failed", e);
+ }
}
- }
}
/**
- * Write to the connected OutStream.
- *
- * @param buffer The bytes to write
+ * This thread runs during a connection with a remote device. It handles all incoming and outgoing
+ * transmissions.
*/
- public synchronized void write(byte[] buffer) {
- try {
- mmOutStream.write(buffer);
- } catch (IOException e) {
- Log.e(TAG, "Exception during write", e);
-
- // Just notify the client that the connection was lost!
- connectionLost();
- }
- }
+ private class ConnectedThread extends Thread {
+ private final Socket mmSocket;
+ private final InputStream mmInStream;
+ private final OutputStream mmOutStream;
+
+ public ConnectedThread(Socket socket) {
+ if (DEBUG)
+ Log.d(TAG, "CREATE mConnectedThread");
+
+ mmSocket = socket;
+ InputStream tmpIn = null;
+ OutputStream tmpOut = null;
+
+ // Get the Socket input and output streams
+ try {
+ tmpIn = socket.getInputStream();
+ tmpOut = socket.getOutputStream();
+ } catch (IOException e) {
+ Log.e(TAG, "temp sockets not created", e);
+ }
- void cancel() {
- new DisconnectTask().execute(mmInStream, mmOutStream, mmSocket);
- }
- }
+ mmInStream = tmpIn;
+ mmOutStream = tmpOut;
- private static class DisconnectTask extends AsyncTask<Closeable, Void, Void> {
- @Override
- protected Void doInBackground(Closeable... closeables) {
- if (DEBUG) {
- Log.d(TAG, "[DisconnectTask] Closing streams and socket.");
- }
+ if (DEBUG)
+ Log.d(TAG, "BEGIN mConnectedThread");
+ }
- for (Closeable closeable : closeables) {
- try {
- closeable.close();
- } catch (IOException e) {
- Log.e(TAG, e.getMessage(), e);
+ public void run() {
+ int len;
+ byte[] buffer = new byte[16384];
+
+ // Keep listening to the InputStream while connected
+ while (!isInterrupted()) {
+ try {
+ // Read from the InputStream
+ len = mmInStream.read(buffer);
+
+ if (mHandler != null)
+
+ if (len > 0) {
+ byte type = MQTTHelper.decodeType(buffer);
+
+ if (DEBUG)
+ Log.d(TAG, "Received " + MQTTHelper.decodePackageName(type));
+
+ // Handle automatic responses here
+ switch (type) {
+ case CONNECT:
+ // Client should never receive CONNECT message
+ break;
+
+ case CONNACK:
+ MQTTConnack connack = MQTTConnack.fromBuffer(buffer);
+
+ switch (connack.getReturnCode()) {
+ case CONNECTION_ACCEPTED:
+ if (DEBUG)
+ Log.d(TAG, "Connected");
+ setState(STATE_CONNECTED);
+ break;
+
+ case CONNECTION_REFUSED_VERSION:
+ if (DEBUG)
+ Log.d(TAG, "Failed to connect, unaccebtable protocol version");
+ setState(STATE_CONNECTION_FAILED);
+ break;
+
+ case CONNECTION_REFUSED_IDENTIFIER:
+ if (DEBUG)
+ Log.d(TAG, "Failed to connect, identifier rejected");
+ setState(STATE_CONNECTION_FAILED);
+ break;
+
+ case CONNECTION_REFUSED_SERVER:
+ if (DEBUG)
+ Log.d(TAG, "Failed to connect, server unavailable");
+ setState(STATE_CONNECTION_FAILED);
+ break;
+
+ case CONNECTION_REFUSED_USER:
+ if (DEBUG)
+ Log.d(TAG, "Failed to connect, bad username or password");
+ setState(STATE_CONNECTION_FAILED);
+ break;
+
+ case CONNECTION_REFUSED_AUTH:
+ if (DEBUG)
+ Log.d(TAG, "Failed to connect, not authorized");
+ setState(STATE_CONNECTION_FAILED);
+ break;
+ }
+ break;
+
+ case PUBLISH:
+ MQTTPublish publish = MQTTPublish.fromBuffer(buffer);
+ switch (publish.getQoS()) {
+ case AT_MOST_ONCE:
+ // Do nothing
+ break;
+
+ case AT_LEAST_ONCE:
+ // Send PUBACK
+ MQTTPuback puback_ = MQTTPuback.newInstance(publish.getPackageIdentifier());
+ sendMessage(puback_);
+ break;
+
+ case EXACTLY_ONCE:
+ // Send PUBREC and store message
+ MQTTPubrec pubrec_ = MQTTPubrec.newInstance(publish.getPackageIdentifier());
+ mMqttIdentifierHelper.addReceivedPackage(pubrec_);
+ sendMessage(pubrec_);
+
+ mMqttIdentifierHelper.addSentPackage(pubrec_);
+ break;
+ }
+ mHandler.obtainMessage(PUBLISH, mState, -1, publish).sendToTarget();
+ break;
+
+ case PUBACK:
+ MQTTPuback puback = MQTTPuback.fromBuffer(buffer);
+ mMqttIdentifierHelper.removeSentPackage(puback);
+ handlePubmesage(puback);
+ break;
+
+ case PUBREC:
+ MQTTPubrec pubrec = MQTTPubrec.fromBuffer(buffer);
+ int packageIdentifier = pubrec.getPackageIdentifier();
+ mMqttIdentifierHelper.removeSentPackage(pubrec);
+
+ MQTTPubrel pubrel_ = MQTTPubrel.newInstance(packageIdentifier);
+ sendMessage(pubrel_);
+ break;
+
+ case PUBREL:
+ MQTTPubrel pubrel = MQTTPubrel.fromBuffer(buffer);
+ mMqttIdentifierHelper.removeReceivedPackage(pubrel);
+
+ MQTTPubcomp pubcomp_ = MQTTPubcomp.newInstance(pubrel.getPackageIdentifier());
+ sendMessage(pubcomp_);
+ break;
+
+ case PUBCOMP:
+ MQTTPubcomp pubcomp = MQTTPubcomp.fromBuffer(buffer);
+ mMqttIdentifierHelper.removeReceivedPackage(pubcomp);
+ break;
+
+ case SUBSCRIBE:
+ // Client doesn't receive this message
+ break;
+
+ case SUBACK:
+ MQTTSuback suback = MQTTSuback.fromBuffer(buffer);
+ handleSubscriptions(suback);
+ break;
+
+ case UNSUBSCRIBE:
+ // Client doesn't receive this message
+ break;
+
+ case UNSUBACK:
+ MQTTUnsuback unsuback = MQTTUnsuback.fromBuffer(buffer);
+ handleSubscriptions(unsuback);
+ mMqttIdentifierHelper.removeSentPackage(unsuback);
+ break;
+
+ case PINGREQ:
+ // Client doesn't receive this message
+ break;
+
+ case PINGRESP:
+ lastPingResp = System.currentTimeMillis();
+ break;
+
+ case DISCONNECT:
+ // Client doesn't receive this message
+ break;
+ }
+ }
+
+ } catch (IOException e) {
+ if (DEBUG)
+ Log.e(TAG, "disconnected (this is fine, expected almost)", e);
+
+ connectionLost();
+
+ break;
+ }
+ }
}
- }
- return null;
+ /**
+ * Write to the connected OutStream.
+ *
+ * @param buffer The bytes to write
+ */
+ public synchronized void write(byte[] buffer) {
+ try {
+ mmOutStream.write(buffer);
+ } catch (IOException e) {
+ Log.e(TAG, "Exception during write", e);
+
+ // Just notify the client that the connection was lost!
+ connectionLost();
+ }
+ }
+
+ void cancel() {
+ new DisconnectTask().execute(mmInStream, mmOutStream, mmSocket);
+ }
}
- }
- private class WriterTask extends AsyncTask<MQTTMessage, Void, MQTTMessage> {
+ private static class DisconnectTask extends AsyncTask<Closeable, Void, Void> {
+ @Override
+ protected Void doInBackground(Closeable... closeables) {
+ if (DEBUG) {
+ Log.d(TAG, "[DisconnectTask] Closing streams and socket.");
+ }
- @Override
- protected MQTTMessage doInBackground(MQTTMessage... params) {
- if (params.length == 0)
- return null;
-
- try {
- mConnectedThread.write(params[0].get());
- return params[0];
- } catch (MQTTException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- } catch (NullPointerException e) {
- e.printStackTrace();
- }
-
- return null;
+ for (Closeable closeable : closeables) {
+ try {
+ closeable.close();
+ } catch (IOException e) {
+ Log.e(TAG, e.getMessage(), e);
+ }
+ }
+
+ return null;
+ }
}
- @Override
- protected void onPostExecute(MQTTMessage sent) {
- super.onPostExecute(sent);
+ private class WriterTask extends AsyncTask<MQTTMessage, Void, MQTTMessage> {
+
+ @Override
+ protected MQTTMessage doInBackground(MQTTMessage... params) {
+ if (params.length == 0)
+ return null;
+
+ try {
+ mConnectedThread.write(params[0].get());
+ return params[0];
+ } catch (MQTTException e) {
+ e.printStackTrace();
+ } catch (IOException e) {
+ e.printStackTrace();
+ } catch (NullPointerException e) {
+ e.printStackTrace();
+ }
- if (!isCancelled()) {
- if (sent != null) {
- lastSentMessage = System.currentTimeMillis();
+ return null;
+ }
- try {
- if (mKeepaliveHandler != null) {
- mKeepaliveHandler.removeCallbacks(mPingSender);
- mKeepaliveHandler.postDelayed(mPingSender, KEEP_ALIVE_TIMER);
+ @Override
+ protected void onPostExecute(MQTTMessage sent) {
+ super.onPostExecute(sent);
+
+ if (!isCancelled()) {
+ if (sent != null) {
+ lastSentMessage = System.currentTimeMillis();
+
+ try {
+ if (mKeepaliveHandler != null) {
+ mKeepaliveHandler.removeCallbacks(mPingSender);
+ mKeepaliveHandler.postDelayed(mPingSender, KEEP_ALIVE_TIMER);
+ }
+ } catch (Exception ex) {
+ Log.e(TAG, ex.getMessage(), ex);
+ }
+ }
}
- } catch (Exception ex) {
- Log.e(TAG, ex.getMessage(), ex);
- }
}
- }
}
- }
}
-#Sat Sep 05 16:21:32 CST 2020\r
-VERSION_CODE=516\r
+#Thu Dec 10 14:55:18 CST 2020\r
+VERSION_CODE=517\r