diff --git a/app/app-release.apk b/app/app-release.apk index 5f80490..00fdd14 100644 Binary files a/app/app-release.apk and b/app/app-release.apk differ diff --git a/app/app.iml b/app/app.iml index 56250d7..6503e48 100644 --- a/app/app.iml +++ b/app/app.iml @@ -68,6 +68,7 @@ + @@ -88,14 +89,15 @@ - - + + + @@ -108,13 +110,13 @@ + - @@ -129,8 +131,8 @@ + - diff --git a/app/build.gradle b/app/build.gradle index 131967d..178f954 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -19,8 +19,8 @@ android { applicationId "org.deke.risk.riskahead" minSdkVersion 15 targetSdkVersion 23 - versionCode 29 - versionName "2.0.1" + versionCode 31 + versionName "2.0.3" } buildTypes { release { diff --git a/app/src/main/java/org/deke/risk/riskahead/ReportWFActivity.java b/app/src/main/java/org/deke/risk/riskahead/ReportWFActivity.java index 44e651d..20c9980 100644 --- a/app/src/main/java/org/deke/risk/riskahead/ReportWFActivity.java +++ b/app/src/main/java/org/deke/risk/riskahead/ReportWFActivity.java @@ -1,10 +1,13 @@ package org.deke.risk.riskahead; +import android.Manifest; import android.app.AlertDialog; +import android.content.pm.PackageManager; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.net.Uri; import android.provider.MediaStore; +import android.support.v4.app.ActivityCompat; import android.support.v4.app.FragmentTransaction; import android.content.DialogInterface; import android.content.Intent; @@ -26,6 +29,8 @@ import com.android.volley.toolbox.StringRequest; import com.beardedhen.androidbootstrap.BootstrapButton; import com.beardedhen.androidbootstrap.api.defaults.DefaultBootstrapBrand; import com.google.android.gms.maps.model.LatLng; +import com.google.android.gms.plus.Plus; +import com.google.android.gms.plus.model.people.Person; import com.google.gson.Gson; import org.deke.risk.riskahead.fragment.BaseReportWFFragment; @@ -65,6 +70,7 @@ public class ReportWFActivity extends BaseActivity implements ReportWF_1_Fragmen ,ReportWF_7_Fragment.OnInputFinishedListener, ReportWF_8_Fragment.OnInputFinishedListener, ReportWF_Finish_Fragment.SendReportListener { private final static String TAG = ReportWFActivity.class.getSimpleName(); + private static final int MY_PERMISSIONS_REQUEST_STORAGE = 42; private List fragList = new ArrayList<>(); @@ -384,7 +390,36 @@ public class ReportWFActivity extends BaseActivity implements ReportWF_1_Fragmen } private void showDialogWhenReportAdded(final IncidentReport incident) { + if (ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { + ActivityCompat.requestPermissions(this, new String[]{android.Manifest.permission.WRITE_EXTERNAL_STORAGE}, MY_PERMISSIONS_REQUEST_STORAGE); + return; + }else{ + showShareDialog(incident); + } + } + @Override + public void onRequestPermissionsResult(int requestCode, + String permissions[], int[] grantResults) { + switch (requestCode) { + case MY_PERMISSIONS_REQUEST_STORAGE: { + // If request is cancelled, the result arrays are empty. + if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { + + showShareDialog(incident); + + } else { + finishReportAndGotoMap(incident); + } + return; + } + + // other 'case' lines to check for other + // permissions this app might request + } + } + + private void showShareDialog(final IncidentReport incident) { new AlertDialog.Builder(ReportWFActivity.this) .setTitle(R.string.txt_share_title) .setMessage(R.string.txt_share_message) @@ -392,7 +427,11 @@ public class ReportWFActivity extends BaseActivity implements ReportWF_1_Fragmen public void onClick(DialogInterface dialog, int which) { resetStateAndIncident(); gotoMapActivity(incident.getPosition().latitude + ":" + incident.getPosition().longitude); + + startShareIncidentIntent(incident); + + } }) .setNegativeButton(android.R.string.no, new DialogInterface.OnClickListener() { @@ -402,7 +441,6 @@ public class ReportWFActivity extends BaseActivity implements ReportWF_1_Fragmen }) .setIcon(android.R.drawable.ic_dialog_alert) .show(); - } private void startShareIncidentIntent(IncidentReport incident) { diff --git a/app/src/main/java/org/deke/risk/riskahead/SubscriptionsActivity.java b/app/src/main/java/org/deke/risk/riskahead/SubscriptionsActivity.java index ec83416..5917813 100644 --- a/app/src/main/java/org/deke/risk/riskahead/SubscriptionsActivity.java +++ b/app/src/main/java/org/deke/risk/riskahead/SubscriptionsActivity.java @@ -79,39 +79,42 @@ public class SubscriptionsActivity extends BaseActivity{ tblBillings = (TableLayout) findViewById(R.id.tbl_billing); handler = new Handler(); - Thread thread = new Thread() { - @Override - public void run() { - ServiceConnection mServiceConn = new ServiceConnection() { - @Override - public void onServiceDisconnected(ComponentName name) { - mService = null; - Log.d(TAG, "Disconnected from InApp Billing Service"); - } - @Override - public void onServiceConnected(ComponentName name, - IBinder service) { - mService = IInAppBillingService.Stub.asInterface(service); - Log.d(TAG,"Connected to InApp Billing Service"); + Thread thread = new Thread() { + @Override + public void run() { - initBillingOptions(); - getAlreadyPurchasedItems(); - } - }; + ServiceConnection mServiceConn = new ServiceConnection() { + @Override + public void onServiceDisconnected(ComponentName name) { + mService = null; + Log.d(TAG, "Disconnected from InApp Billing Service"); + } - Intent serviceIntent = new Intent("com.android.vending.billing.InAppBillingService.BIND"); - serviceIntent.setPackage("com.android.vending"); - bindService(serviceIntent, mServiceConn, Context.BIND_AUTO_CREATE); + @Override + public void onServiceConnected(ComponentName name, + IBinder service) { + mService = IInAppBillingService.Stub.asInterface(service); + Log.d(TAG, "Connected to InApp Billing Service"); - querySkus = new Bundle(); - querySkus.putStringArrayList("ITEM_ID_LIST", skuList); + initBillingOptions(); + getAlreadyPurchasedItems(); + } + }; - } - }; + Intent serviceIntent = new Intent("com.android.vending.billing.InAppBillingService.BIND"); + serviceIntent.setPackage("com.android.vending"); + bindService(serviceIntent, mServiceConn, Context.BIND_AUTO_CREATE); + + querySkus = new Bundle(); + querySkus.putStringArrayList("ITEM_ID_LIST", skuList); + + } + }; + + thread.start(); - thread.start(); } private void getAlreadyPurchasedItems() { diff --git a/app/src/main/java/org/deke/risk/riskahead/helper/BaseActivity.java b/app/src/main/java/org/deke/risk/riskahead/helper/BaseActivity.java index e5cae43..fe23f3f 100644 --- a/app/src/main/java/org/deke/risk/riskahead/helper/BaseActivity.java +++ b/app/src/main/java/org/deke/risk/riskahead/helper/BaseActivity.java @@ -15,7 +15,6 @@ import android.content.pm.PackageManager; import android.content.res.Configuration; import android.content.res.Resources; import android.graphics.drawable.ColorDrawable; -import android.location.LocationManager; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.net.Uri; @@ -46,8 +45,6 @@ import com.android.volley.toolbox.StringRequest; import com.google.android.gms.ads.AdListener; import com.google.android.gms.ads.AdRequest; import com.google.android.gms.ads.InterstitialAd; -import com.google.android.gms.plus.Plus; -import com.google.android.gms.plus.model.people.Person; import com.mikepenz.google_material_typeface_library.GoogleMaterial; import com.mikepenz.materialdrawer.AccountHeader; import com.mikepenz.materialdrawer.AccountHeaderBuilder; @@ -140,16 +137,13 @@ public abstract class BaseActivity extends AppCompatActivity { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - //overridePendingTransition(R.anim.fade_in_anim, R.anim.fade_out_anim); - //overridePendingTransition(android.R.anim.slide_in_left, android.R.anim.slide_out_right); - onStartCount = 1; - if (savedInstanceState == null) // 1st time + if (savedInstanceState == null) { this.overridePendingTransition(R.anim.slide_in_left, R.anim.slide_out_left); - } else // already created so reverse animation + } else { onStartCount = 2; }