diff --git a/build.gradle b/build.gradle
index c571e90..e6359b3 100755
--- a/build.gradle
+++ b/build.gradle
@@ -45,9 +45,9 @@ android {
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
// testCompile 'junit:junit:4.12'
- compile 'com.android.support:appcompat-v7:25.0.1'
- compile 'com.android.support:recyclerview-v7:25.0.1'
- compile 'com.android.support:cardview-v7:25.0.1'
+ compile 'com.android.support:appcompat-v7:25.1.0'
+ compile 'com.android.support:recyclerview-v7:25.1.0'
+ compile 'com.android.support:cardview-v7:25.1.0'
compile 'com.google.android.gms:play-services-location:10.0.1'
compile 'com.google.android.gms:play-services-maps:10.0.1'
compile 'com.google.android.gms:play-services-nearby:10.0.1'
diff --git a/res/drawable-hdpi/ic_pdk_diagnostic.png b/res/drawable-hdpi/ic_pdk_diagnostic.png
new file mode 100755
index 0000000..e80247a
Binary files /dev/null and b/res/drawable-hdpi/ic_pdk_diagnostic.png differ
diff --git a/res/drawable-mdpi/ic_pdk_diagnostic.png b/res/drawable-mdpi/ic_pdk_diagnostic.png
new file mode 100755
index 0000000..539cf8a
Binary files /dev/null and b/res/drawable-mdpi/ic_pdk_diagnostic.png differ
diff --git a/res/drawable-xhdpi/ic_pdk_diagnostic.png b/res/drawable-xhdpi/ic_pdk_diagnostic.png
new file mode 100755
index 0000000..c9ebaa0
Binary files /dev/null and b/res/drawable-xhdpi/ic_pdk_diagnostic.png differ
diff --git a/res/drawable-xxhdpi/ic_pdk_diagnostic.png b/res/drawable-xxhdpi/ic_pdk_diagnostic.png
new file mode 100755
index 0000000..62b411d
Binary files /dev/null and b/res/drawable-xxhdpi/ic_pdk_diagnostic.png differ
diff --git a/res/drawable-xxxhdpi/ic_pdk_diagnostic.png b/res/drawable-xxxhdpi/ic_pdk_diagnostic.png
new file mode 100755
index 0000000..ed16022
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_pdk_diagnostic.png differ
diff --git a/res/layout/card_diagnostic_action.xml b/res/layout/card_diagnostic_action.xml
index a3274e1..acfd651 100755
--- a/res/layout/card_diagnostic_action.xml
+++ b/res/layout/card_diagnostic_action.xml
@@ -1,20 +1,41 @@
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ xmlns:tools="http://schemas.android.com/tools"
+ android:orientation="vertical"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content">
-
+
+ android:layout_height="wrap_content">
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/layout_diagnostics_pdk.xml b/res/layout/layout_diagnostics_pdk.xml
index e71a783..379c418 100755
--- a/res/layout/layout_diagnostics_pdk.xml
+++ b/res/layout/layout_diagnostics_pdk.xml
@@ -1,7 +1,16 @@
-
+ android:layout_height="match_parent">
+
+
+
diff --git a/res/menu/diagnostic_menu.xml b/res/menu/diagnostic_menu.xml
new file mode 100755
index 0000000..65f394a
--- /dev/null
+++ b/res/menu/diagnostic_menu.xml
@@ -0,0 +1,6 @@
+
\ No newline at end of file
diff --git a/res/values/diagnostics.xml b/res/values/diagnostics.xml
index c0adb6a..a656358 100755
--- a/res/values/diagnostics.xml
+++ b/res/values/diagnostics.xml
@@ -1,7 +1,19 @@
- Unable to connect to Microsoft Band.
+ Microsoft Band App Not Installed
+ Unable to connect to Microsoft Band. Please install the app and try again.
+
+ Microsoft Band Permission Required
Please grant the app sensor access on the Microsoft Band.
- Please grant the app permission to access location services on this device.
+
+ Activity Recognition Permission Required
Please grant the app permission to recognize your activity using data from this device.
+
+ Call Log Permission Required
Please grant the app permission to access the phone call logs on this device.
+
+ Text Messaging Permission Required
+ Please all the app permission to access your text messages to gather and report your messaging activity statistics.
+
+ Location Permission Required
+ Please grant the app permission to access location services on this device.
diff --git a/res/values/generators.xml b/res/values/generators.xml
index b5e805f..2fbcf3b 100755
--- a/res/values/generators.xml
+++ b/res/values/generators.xml
@@ -69,7 +69,6 @@
%1$d chars.
No text messages have been sent or received on this device.
- Please all the app permission to access your text messages to gather and report your messaging activity statistics.
Phone Calls
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 6474efa..a784812 100755
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -15,5 +15,10 @@
Today
Never
+ Diagnostics
+ Diagnostics (%d)
+ Diagnostics
+
+ The app is set up correctly.\n\nNo further actions are needed.
diff --git a/src/com/audacious_software/passive_data_kit/activities/DataStreamActivity.java b/src/com/audacious_software/passive_data_kit/activities/DataStreamActivity.java
index a4a1300..04e416c 100755
--- a/src/com/audacious_software/passive_data_kit/activities/DataStreamActivity.java
+++ b/src/com/audacious_software/passive_data_kit/activities/DataStreamActivity.java
@@ -66,25 +66,15 @@ protected void onPause() {
@Override
public void onGeneratorUpdated(String identifier, Bundle data) {
- Log.e("PDK", "GOT GENERATOR UPDATE: " + identifier + " -- " + data);
-
- this.mAdapter.notifyDataSetChanged();
-
- final int count = this.mAdapter.getItemCount();
-
- Handler mainHandler = new Handler(Looper.getMainLooper());
-
final DataStreamActivity me = this;
- mainHandler.post(new Runnable() {
+ this.runOnUiThread(new Runnable() {
@Override
public void run() {
+ me.mAdapter.notifyDataSetChanged();
+ int count = me.mAdapter.getItemCount();
me.getSupportActionBar().setSubtitle(me.getResources().getQuantityString(R.plurals.activity_data_stream_subtitle, count, count));
}
});
-
-// RecyclerView listView = (RecyclerView) this.findViewById(R.id.list_view);
-// listView.setAdapter(this.mAdapter);
-// listView.invalidate();
}
}
diff --git a/src/com/audacious_software/passive_data_kit/activities/DiagnosticsActivity.java b/src/com/audacious_software/passive_data_kit/activities/DiagnosticsActivity.java
index ce8a3d5..851103d 100755
--- a/src/com/audacious_software/passive_data_kit/activities/DiagnosticsActivity.java
+++ b/src/com/audacious_software/passive_data_kit/activities/DiagnosticsActivity.java
@@ -1,11 +1,14 @@
package com.audacious_software.passive_data_kit.activities;
+import android.app.Activity;
+import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
-import android.util.Log;
import android.view.LayoutInflater;
+import android.view.Menu;
+import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
@@ -17,6 +20,38 @@
import java.util.ArrayList;
public class DiagnosticsActivity extends AppCompatActivity {
+ public static void setUpDiagnositicsItem(Activity activity, Menu menu, boolean showAction) {
+ final ArrayList actions = PassiveDataKit.diagnostics(activity);
+
+ MenuItem item = menu.add(Menu.NONE, R.id.action_diagnostics, 0, activity.getString(R.string.action_diagnostics));
+
+ if (actions.size() > 0 && showAction) {
+ item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
+
+ item.setIcon(R.drawable.ic_pdk_diagnostic);
+ item.setTitle("" + actions.size());
+ } else {
+ item.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
+
+ if (actions.size() > 0) {
+ item.setTitle(activity.getString(R.string.action_diagnostics_incomplete, actions.size()));
+ }
+ }
+ }
+
+ public static boolean diagnosticItemSelected(Activity activity, MenuItem item) {
+ int id = item.getItemId();
+
+ if (id == R.id.action_diagnostics) {
+ Intent diagnosticsIntent = new Intent(activity, DiagnosticsActivity.class);
+ activity.startActivity(diagnosticsIntent);
+
+ return true;
+ }
+
+ return false;
+ }
+
private class DiagnosticViewHolder extends RecyclerView.ViewHolder {
private View mView = null;
@@ -44,7 +79,10 @@ public void bindDiagnosticAction(DiagnosticAction action)
{
this.mAction = action;
- TextView message = (TextView) this.mView.findViewById(R.id.message_action);
+ TextView title = (TextView) this.mView.findViewById(R.id.action_title);
+ title.setText(action.getTitle());
+
+ TextView message = (TextView) this.mView.findViewById(R.id.action_message);
message.setText(action.getMessage());
}
}
@@ -52,34 +90,46 @@ public void bindDiagnosticAction(DiagnosticAction action)
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setContentView(R.layout.layout_diagnostics_pdk);
+ this.getSupportActionBar().setTitle(R.string.title_pdk_diagnostics);
+ }
- final ArrayList actions = PassiveDataKit.diagnostics(this);
+ protected void onResume() {
+ super.onResume();
- Log.e("PDK", "ACTIONS COUNT: " + actions.size());
+ final ArrayList actions = PassiveDataKit.diagnostics(this);
RecyclerView listView = (RecyclerView) this.findViewById(R.id.list_view);
+ TextView emptyMessage = (TextView) this.findViewById(R.id.message_no_diagnostics);
- listView.setLayoutManager(new LinearLayoutManager(this));
+ if (actions.size() > 0) {
+ listView.setVisibility(View.VISIBLE);
+ emptyMessage.setVisibility(View.GONE);
- listView.setAdapter(new RecyclerView.Adapter() {
- @Override
- public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
- View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.card_diagnostic_action, parent, false);
+ listView.setLayoutManager(new LinearLayoutManager(this));
- return new DiagnosticViewHolder(v);
- }
+ listView.setAdapter(new RecyclerView.Adapter() {
+ @Override
+ public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
+ View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.card_diagnostic_action, parent, false);
- @Override
- public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
- DiagnosticViewHolder diagHolder = (DiagnosticViewHolder) holder;
+ return new DiagnosticViewHolder(v);
+ }
- diagHolder.bindDiagnosticAction(actions.get(position));
- }
+ @Override
+ public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
+ DiagnosticViewHolder diagHolder = (DiagnosticViewHolder) holder;
- @Override
- public int getItemCount() {
- return actions.size();
- }
- });
+ diagHolder.bindDiagnosticAction(actions.get(position));
+ }
+
+ @Override
+ public int getItemCount() {
+ return actions.size();
+ }
+ });
+ } else {
+ listView.setVisibility(View.GONE);
+ emptyMessage.setVisibility(View.VISIBLE);
+ }
}
}
diff --git a/src/com/audacious_software/passive_data_kit/diagnostics/DiagnosticAction.java b/src/com/audacious_software/passive_data_kit/diagnostics/DiagnosticAction.java
index c3869ff..d466198 100755
--- a/src/com/audacious_software/passive_data_kit/diagnostics/DiagnosticAction.java
+++ b/src/com/audacious_software/passive_data_kit/diagnostics/DiagnosticAction.java
@@ -8,8 +8,10 @@
public class DiagnosticAction {
private String mMessage = null;
private Runnable mAction = null;
+ private String mTitle = null;
- public DiagnosticAction(String message, Runnable action) {
+ public DiagnosticAction(String title, String message, Runnable action) {
+ this.mTitle = title;
this.mMessage = message;
this.mAction = action;
}
@@ -25,4 +27,8 @@ public void run() {
public String getMessage() {
return this.mMessage;
}
+
+ public String getTitle() {
+ return this.mTitle;
+ }
}
diff --git a/src/com/audacious_software/passive_data_kit/generators/communication/PhoneCalls.java b/src/com/audacious_software/passive_data_kit/generators/communication/PhoneCalls.java
index 93677c0..f72cbe8 100755
--- a/src/com/audacious_software/passive_data_kit/generators/communication/PhoneCalls.java
+++ b/src/com/audacious_software/passive_data_kit/generators/communication/PhoneCalls.java
@@ -142,6 +142,7 @@ private void startGenerator() {
final Runnable checkLogs = new Runnable() {
@Override
public void run() {
+ Log.e("PDK", "CHECK PHONE LOGS");
boolean approved = false;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
@@ -365,7 +366,7 @@ public static ArrayList diagnostics(final Context context) {
if (ContextCompat.checkSelfPermission(context, Manifest.permission.READ_CALL_LOG) != PackageManager.PERMISSION_GRANTED){
final Handler handler = new Handler(Looper.getMainLooper());
- actions.add(new DiagnosticAction(context.getString(R.string.diagnostic_call_log_permission_required), new Runnable() {
+ actions.add(new DiagnosticAction(context.getString(R.string.diagnostic_call_log_permission_required_title), context.getString(R.string.diagnostic_call_log_permission_required), new Runnable() {
@Override
public void run() {
diff --git a/src/com/audacious_software/passive_data_kit/generators/communication/TextMessages.java b/src/com/audacious_software/passive_data_kit/generators/communication/TextMessages.java
index 3ad7c05..f82e641 100755
--- a/src/com/audacious_software/passive_data_kit/generators/communication/TextMessages.java
+++ b/src/com/audacious_software/passive_data_kit/generators/communication/TextMessages.java
@@ -16,6 +16,7 @@
import android.os.Looper;
import android.preference.PreferenceManager;
import android.support.v4.content.ContextCompat;
+import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -119,6 +120,9 @@ private void startGenerator() {
final Runnable checkLogs = new Runnable() {
@Override
public void run() {
+
+ Log.e("PDK", "CHECK TEXT LOGS");
+
boolean approved = false;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
@@ -311,7 +315,7 @@ public static ArrayList diagnostics(final Context context) {
if (ContextCompat.checkSelfPermission(context, Manifest.permission.READ_SMS) != PackageManager.PERMISSION_GRANTED){
final Handler handler = new Handler(Looper.getMainLooper());
- actions.add(new DiagnosticAction(context.getString(R.string.diagnostic_sms_log_permission_required), new Runnable() {
+ actions.add(new DiagnosticAction(context.getString(R.string.diagnostic_sms_log_permission_required_title), context.getString(R.string.diagnostic_sms_log_permission_required), new Runnable() {
@Override
public void run() {
diff --git a/src/com/audacious_software/passive_data_kit/generators/device/Location.java b/src/com/audacious_software/passive_data_kit/generators/device/Location.java
index c76a801..7363344 100755
--- a/src/com/audacious_software/passive_data_kit/generators/device/Location.java
+++ b/src/com/audacious_software/passive_data_kit/generators/device/Location.java
@@ -22,6 +22,7 @@
import android.support.v4.graphics.drawable.DrawableCompat;
import android.support.v7.widget.SwitchCompat;
import android.util.DisplayMetrics;
+import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -230,7 +231,7 @@ private ArrayList runDiagostics() {
int permissionCheck = ContextCompat.checkSelfPermission(this.mContext, Manifest.permission.ACCESS_FINE_LOCATION);
if (permissionCheck != PackageManager.PERMISSION_GRANTED) {
- actions.add(new DiagnosticAction(me.mContext.getString(R.string.diagnostic_missing_location_permission), new Runnable() {
+ actions.add(new DiagnosticAction(me.mContext.getString(R.string.diagnostic_missing_location_permission_title), me.mContext.getString(R.string.diagnostic_missing_location_permission), new Runnable() {
@Override
public void run() {
@@ -281,6 +282,8 @@ public void onConnectionFailed(ConnectionResult connectionResult) {
@Override
public void onLocationChanged(android.location.Location location) {
+ Log.e("PDK", "LOCATION CHANGED");
+
if (location == null)
return;
diff --git a/src/com/audacious_software/passive_data_kit/generators/services/GoogleAwareness.java b/src/com/audacious_software/passive_data_kit/generators/services/GoogleAwareness.java
index 9aea317..0688e7d 100755
--- a/src/com/audacious_software/passive_data_kit/generators/services/GoogleAwareness.java
+++ b/src/com/audacious_software/passive_data_kit/generators/services/GoogleAwareness.java
@@ -19,13 +19,10 @@
import com.audacious_software.passive_data_kit.generators.Generators;
import com.audacious_software.pdk.passivedatakit.R;
import com.google.android.gms.awareness.Awareness;
-import com.google.android.gms.awareness.snapshot.DetectedActivityResult;
import com.google.android.gms.awareness.snapshot.HeadphoneStateResult;
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.common.api.ResultCallback;
-import com.google.android.gms.location.ActivityRecognitionResult;
-import com.google.android.gms.location.DetectedActivity;
import java.util.ArrayList;
import java.util.List;
@@ -106,7 +103,7 @@ private ArrayList runDiagostics() {
int permissionCheck = ContextCompat.checkSelfPermission(this.mContext, Manifest.permission.ACCESS_FINE_LOCATION);
if (permissionCheck != PackageManager.PERMISSION_GRANTED) {
- actions.add(new DiagnosticAction(me.mContext.getString(R.string.diagnostic_missing_location_permission), new Runnable() {
+ actions.add(new DiagnosticAction(me.mContext.getString(R.string.diagnostic_missing_location_permission_title), me.mContext.getString(R.string.diagnostic_missing_location_permission), new Runnable() {
@Override
public void run() {
handler.post(new Runnable() {
@@ -130,7 +127,7 @@ public void run() {
if (permissionCheck != PackageManager.PERMISSION_GRANTED) {
Log.e("PDK", "3.3");
- actions.add(new DiagnosticAction(me.mContext.getString(R.string.diagnostic_missing_activity_recognition_permission), new Runnable() {
+ actions.add(new DiagnosticAction(me.mContext.getString(R.string.diagnostic_missing_activity_recognition_permission_title), me.mContext.getString(R.string.diagnostic_missing_activity_recognition_permission), new Runnable() {
@Override
public void run() {
handler.post(new Runnable() {
diff --git a/src/com/audacious_software/passive_data_kit/generators/wearables/MicrosoftBand.java b/src/com/audacious_software/passive_data_kit/generators/wearables/MicrosoftBand.java
index b8f4d3b..246e7d3 100755
--- a/src/com/audacious_software/passive_data_kit/generators/wearables/MicrosoftBand.java
+++ b/src/com/audacious_software/passive_data_kit/generators/wearables/MicrosoftBand.java
@@ -561,7 +561,7 @@ private ArrayList runDiagostics() {
final MicrosoftBand me = this;
if (MicrosoftBand.sInstance.mBandClient == null) {
- actions.add(new DiagnosticAction(me.mContext.getString(R.string.diagnostic_missing_msft_band_client), new Runnable() {
+ actions.add(new DiagnosticAction(me.mContext.getString(R.string.diagnostic_missing_msft_band_client_title), me.mContext.getString(R.string.diagnostic_missing_msft_band_client), new Runnable() {
@Override
public void run() {
@@ -575,7 +575,7 @@ public void run() {
}
}));
} else if (!MicrosoftBand.sInstance.mBandClient.isConnected()) {
- actions.add(new DiagnosticAction(me.mContext.getString(R.string.diagnostic_missing_msft_band_client), new Runnable() {
+ actions.add(new DiagnosticAction(me.mContext.getString(R.string.diagnostic_missing_msft_band_client_title), me.mContext.getString(R.string.diagnostic_missing_msft_band_client), new Runnable() {
@Override
public void run() {
@@ -596,7 +596,7 @@ public void run() {
if (this.canAccessSensor(sensors, MicrosoftBand.HeartRateDataPoint.class) ||
this.canAccessSensor(sensors, MicrosoftBand.HeartRateVariabilityDataPoint.class)) {
if (sensors.getCurrentHeartRateConsent() != UserConsent.GRANTED) {
- actions.add(new DiagnosticAction(me.mContext.getString(R.string.diagnostic_missing_msft_band_auth), new Runnable() {
+ actions.add(new DiagnosticAction(me.mContext.getString(R.string.diagnostic_missing_msft_band_auth_title), me.mContext.getString(R.string.diagnostic_missing_msft_band_auth), new Runnable() {
@Override
public void run() {