Gregory Rudolph
3 years ago
4 changed files with 378 additions and 141 deletions
@ -0,0 +1,171 @@
@@ -0,0 +1,171 @@
|
||||
package haus.nightmare.GlassTesla; |
||||
|
||||
import android.app.Service; |
||||
import android.content.Intent; |
||||
import android.content.SharedPreferences; |
||||
import android.os.Binder; |
||||
import android.os.Handler; |
||||
import android.os.IBinder; |
||||
import android.preference.PreferenceManager; |
||||
import android.util.Log; |
||||
import com.google.gson.Gson; |
||||
import org.conscrypt.Conscrypt; |
||||
import java.net.URL; |
||||
import java.security.Security; |
||||
import javax.net.ssl.SSLException; |
||||
import okhttp3.OkHttpClient; |
||||
import okhttp3.Request; |
||||
import okhttp3.RequestBody; |
||||
import okhttp3.Response; |
||||
|
||||
public class SyncTeslaService extends Service { |
||||
int startMode; // indicates how to behave if the service is killed
|
||||
IBinder binder = new SyncTeslaBinder(); // interface for clients that bind
|
||||
boolean allowRebind; // indicates whether onRebind should be used
|
||||
private TeslaResponse vehicleData; |
||||
private SharedPreferences prefs; |
||||
|
||||
|
||||
public class SyncTeslaBinder extends Binder { |
||||
SyncTeslaService getService() { |
||||
return SyncTeslaService.this; |
||||
} |
||||
} |
||||
|
||||
public TeslaResponse getVehicleData() { |
||||
return vehicleData; |
||||
} |
||||
|
||||
@Override |
||||
public void onCreate() { |
||||
prefs = PreferenceManager.getDefaultSharedPreferences(this); |
||||
} |
||||
|
||||
@Override |
||||
public int onStartCommand(Intent intent, int flags, int startId) { |
||||
// The service is starting, due to a call to startService()
|
||||
|
||||
new Thread(new Runnable(){ |
||||
public void run() { |
||||
// TODO Auto-generated method stub
|
||||
while(true) |
||||
{ |
||||
try { |
||||
Thread.sleep(2 * 60000); |
||||
loadVehicleData(); |
||||
|
||||
} catch (InterruptedException e) { |
||||
e.printStackTrace(); |
||||
} |
||||
|
||||
} |
||||
|
||||
} |
||||
}).start(); |
||||
|
||||
return startMode; |
||||
} |
||||
public void loadVehicleData(String vehicleId) { |
||||
String json = getResponseFromJsonURL("https://owner-api.teslamotors.com/api/1/vehicles/" |
||||
+ vehicleId +"/vehicle_data"); |
||||
Gson gson = new Gson(); |
||||
ResponseRoot root = gson.fromJson(json, ResponseRoot.class); |
||||
vehicleData = root.response; |
||||
} |
||||
public void loadVehicleData() { |
||||
loadVehicleData(prefs.getString("vehicle_id", "")); |
||||
} |
||||
|
||||
public void updateSharedPrefs(SharedPreferences p) { |
||||
SharedPreferences.Editor e = prefs.edit(); |
||||
prefs = p; |
||||
e.putString("bearer_token", p.getString("bearer_token", "")); |
||||
e.putString("vehicle_id", p.getString("vehicle_id", "")); |
||||
e.apply(); |
||||
|
||||
} |
||||
|
||||
public boolean postCommand(String command) { |
||||
try { |
||||
String token = prefs.getString("bearer_token", ""); |
||||
String vehicleId = prefs.getString("vehicle_id", ""); |
||||
URL object = new URL("https://owner-api.teslamotors.com/api/1/vehicles/" |
||||
+ vehicleId +"/command/" + command); |
||||
OkHttpClient client = new OkHttpClient(); |
||||
Request request = new Request.Builder() |
||||
.url(object) |
||||
.method("POST", RequestBody.create(null, new byte[]{})) |
||||
.addHeader("Authorization", "Bearer " + token) |
||||
.addHeader("User-Agent", "Tesla-GLASS") |
||||
.addHeader("Content-Type", "application/json") |
||||
.build(); |
||||
|
||||
|
||||
Response response = client.newCall(request).execute(); |
||||
if (response.code() == 408) { |
||||
postCommand("wake_up"); |
||||
} |
||||
return response.code() == 200; |
||||
} catch (Exception e) { |
||||
e.printStackTrace(); |
||||
} |
||||
return false; |
||||
} |
||||
|
||||
public String getResponseFromJsonURL(String url) { |
||||
String token = prefs.getString("bearer_token", ""); |
||||
|
||||
String jsonResponse = null; |
||||
if (url.length() > 0) { |
||||
try { |
||||
Security.insertProviderAt(Conscrypt.newProvider(), 1); |
||||
/************** For getting response from HTTP URL start ***************/ |
||||
URL object = new URL(url); |
||||
|
||||
OkHttpClient client = new OkHttpClient(); |
||||
Request request = new Request.Builder() |
||||
.url(object) |
||||
.addHeader("Authorization", "Bearer " + token) |
||||
.addHeader("User-Agent", "Tesla-GLASS") |
||||
.addHeader("Content-Type", "application/json") |
||||
.build(); |
||||
|
||||
Response response = client.newCall(request).execute(); |
||||
|
||||
int responseCode = response.code(); |
||||
|
||||
if (responseCode == 200) { |
||||
return response.body().string(); |
||||
|
||||
} else if (responseCode == 408) { |
||||
postCommand("wake_up"); |
||||
} |
||||
} catch (SSLException e) { |
||||
Log.e("DataSSL", "SSL Exception getting json:", e); |
||||
} catch (Exception e) { |
||||
e.printStackTrace(); |
||||
} |
||||
} |
||||
return jsonResponse; |
||||
} |
||||
|
||||
@Override |
||||
public IBinder onBind(Intent intent) { |
||||
// A client is binding to the service with bindService()
|
||||
return binder; |
||||
} |
||||
@Override |
||||
public boolean onUnbind(Intent intent) { |
||||
// All clients have unbound with unbindService()
|
||||
return allowRebind; |
||||
} |
||||
@Override |
||||
public void onRebind(Intent intent) { |
||||
// A client is binding to the service with bindService(),
|
||||
// after onUnbind() has already been called
|
||||
} |
||||
@Override |
||||
public void onDestroy() { |
||||
// The service is no longer used and is being destroyed
|
||||
} |
||||
} |
Loading…
Reference in new issue