diff --git a/app/app-release.apk b/app/app-release.apk index 25c2556..2b58542 100644 Binary files a/app/app-release.apk and b/app/app-release.apk differ diff --git a/app/build.gradle b/app/build.gradle index be903ad..b805eee 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -19,8 +19,8 @@ android { applicationId "org.deke.risk.riskahead" minSdkVersion 15 targetSdkVersion 22 - versionCode 14 - versionName "1.7.2" + versionCode 15 + versionName "1.8" } buildTypes { release { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 85bf53b..995c439 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -30,8 +30,6 @@ android:label="@string/app_name" android:theme="@style/MyRiskAheadTheme"> - - () { @@ -443,33 +459,27 @@ public class LoginActivity extends AppCompatActivity implements FacebookButtonFr }; } - private StringRequest getStringRequestRegisterUser(final String username, final String email, final String password) { + private StringRequest getStringRequestCheckUserExists(final String username, final String email, final String password) { return new StringRequest(Method.POST, AppConfig.URL_ENCRYPTED, new Response.Listener() { @Override public void onResponse(String response) { - Log.d(TAG, "Register Response: " + response); + Log.d(TAG, "Check User Exists Response: " + response); hideDialog(); try { JSONObject jObj = new JSONObject(response); boolean error = jObj.getBoolean("error"); if (!error) { - new AlertDialog.Builder(LoginActivity.this) - .setTitle(getString(R.string.alert_accregistration_title)) - .setMessage(getString(R.string.alert_accregistration_text)) - .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int which) { - Intent intent = new Intent( - LoginActivity.this, - LoginActivity.class); - intent.putExtra(AppConfig.EXTRA_MESSAGE, AppConfig.INTENT_NORMALLOGIN); - startActivity(intent); - finish(); - } - }) - .setIcon(android.R.drawable.ic_dialog_alert) - .show(); + + if(jObj.getInt("exists") == 1){ + showMessage("Registration failed. Username and/or E-Mail already taken"); + }else{ + createAndShowPrivacyDialog(username, email, password); + } + + + } else { String errorMsg = jObj.getString("error_msg"); Log.e(TAG, "Error occured: "+errorMsg); @@ -493,16 +503,178 @@ public class LoginActivity extends AppCompatActivity implements FacebookButtonFr @Override protected Map getParams() { Map params = new HashMap<>(); - params.put("tag", AppConfig.REST_REGISTER); - params.put("username", username); + params.put("tag", AppConfig.REST_LOGIN_EXISTS); params.put("email", email); - params.put("password", password); return params; } }; } + private StringRequest getStringRequestCheckSocialUserExists(final String key, final String providerType, final String username, final String email) { + return new StringRequest(Method.POST, AppConfig.URL_ENCRYPTED, new Response.Listener() { + + @Override + public void onResponse(String response) { + Log.d(TAG, "Check User Exists Response: " + response); + hideDialog(); + + try { + JSONObject jObj = new JSONObject(response); + boolean error = jObj.getBoolean("error"); + if (!error) { + + if(jObj.getInt("exists") == 1){ + performSocialMediaLogin( key,providerType, username, email); + }else{ + createAndShowPrivacyDialogForSocialUser( key,providerType, username, email); + } + + + + } else { + String errorMsg = jObj.getString("error_msg"); + Log.e(TAG, "Error occured: "+errorMsg); + Toast.makeText(getApplicationContext(), getResources().getString(R.string.txt_errormsg_register), Toast.LENGTH_LONG).show(); + } + } catch (JSONException e) { + e.printStackTrace(); + } + } + }, new Response.ErrorListener() { + + @Override + public void onErrorResponse(VolleyError error) { + Log.e(TAG, "Registration Error: " + error.getMessage()); + Toast.makeText(getApplicationContext(), + getResources().getString(R.string.txt_errormsg_register), Toast.LENGTH_LONG).show(); + hideDialog(); + } + }) { + + @Override + protected Map getParams() { + Map params = new HashMap<>(); + params.put("tag", AppConfig.REST_LOGIN_EXISTS); + params.put("key", key); + + return params; + } + }; + } + + private void createAndShowPrivacyDialogForSocialUser(final String key, final String providerType, final String username, final String email) { + final TextView privacyText = new TextView(LoginActivity.this); + LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams( + LinearLayout.LayoutParams.WRAP_CONTENT, + LinearLayout.LayoutParams.WRAP_CONTENT); + + + privacyText.setLayoutParams(lp); + privacyText.setText(R.string.txt_register_privacy); + privacyText.setMovementMethod(LinkMovementMethod.getInstance()); + privacyText.setPadding(10,20,10,20); + + CheckBox privacyCheckbox = new CheckBox(getApplicationContext()); + privacyCheckbox.setText(R.string.txt_register_privacy_text); + privacyCheckbox.setTextColor(getResources().getColor(R.color.md_black_1000)); + privacyCheckbox.setButtonDrawable(Resources.getSystem().getIdentifier("btn_check_holo_light", "drawable", "android")); + privacyCheckbox.setPadding(10,20,10,20); + + + LinearLayout layout = new LinearLayout(LoginActivity.this); + layout.setOrientation(LinearLayout.VERTICAL); + layout.addView(privacyText); + layout.addView(privacyCheckbox); + + AlertDialog.Builder builder = new AlertDialog.Builder(LoginActivity.this) + .setTitle(R.string.txt_register_privacy_title) + .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + performSocialMediaLogin(key, providerType, username, email); + } + }) + .setNegativeButton(android.R.string.no, new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + } + }) + .setIcon(R.drawable.logo_380); + + final AlertDialog dialog = builder.create(); + + privacyCheckbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + if (isChecked) { + dialog.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(true); + } else { + dialog.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(false); + } + } + }); + + dialog.setView(layout, 40, 40, 40, 40); + dialog.show(); + + dialog.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(false); + } + + private void createAndShowPrivacyDialog(final String username, final String email, final String password) { + final TextView privacyText = new TextView(LoginActivity.this); + LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams( + LinearLayout.LayoutParams.WRAP_CONTENT, + LinearLayout.LayoutParams.WRAP_CONTENT); + + + privacyText.setLayoutParams(lp); + privacyText.setText(R.string.txt_register_privacy); + privacyText.setMovementMethod(LinkMovementMethod.getInstance()); + privacyText.setPadding(10,20,10,20); + + CheckBox privacyCheckbox = new CheckBox(getApplicationContext()); + privacyCheckbox.setText(R.string.txt_register_privacy_text); + privacyCheckbox.setTextColor(getResources().getColor(R.color.md_black_1000)); + privacyCheckbox.setButtonDrawable(Resources.getSystem().getIdentifier("btn_check_holo_light", "drawable", "android")); + privacyCheckbox.setPadding(10,20,10,20); + + + LinearLayout layout = new LinearLayout(LoginActivity.this); + layout.setOrientation(LinearLayout.VERTICAL); + layout.addView(privacyText); + layout.addView(privacyCheckbox); + + AlertDialog.Builder builder = new AlertDialog.Builder(LoginActivity.this) + .setTitle(R.string.txt_register_privacy_title) + .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + performRegistration(username, email, password); + } + }) + .setNegativeButton(android.R.string.no, new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + } + }) + .setIcon(R.drawable.logo_380); + + final AlertDialog dialog = builder.create(); + + privacyCheckbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + if (isChecked) { + dialog.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(true); + } else { + dialog.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(false); + } + } + }); + + dialog.setView(layout, 40, 40, 40, 40); + dialog.show(); + + dialog.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(false); + } + private StringRequest getStringRequestResetPW(final String email) { return new StringRequest(Method.POST, AppConfig.URL_ENCRYPTED, new Response.Listener() { @@ -593,6 +765,67 @@ public class LoginActivity extends AppCompatActivity implements FacebookButtonFr }; } + private StringRequest getStringRequestRegisterUser(final String username, final String email, final String password) { + return new StringRequest(Method.POST, AppConfig.URL_ENCRYPTED, new Response.Listener() { + + @Override + public void onResponse(String response) { + Log.d(TAG, "Register Response: " + response); + hideDialog(); + + try { + JSONObject jObj = new JSONObject(response); + boolean error = jObj.getBoolean("error"); + if (!error) { + new AlertDialog.Builder(LoginActivity.this) + .setTitle(getString(R.string.alert_accregistration_title)) + .setMessage(getString(R.string.alert_accregistration_text)) + .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + Intent intent = new Intent( + LoginActivity.this, + LoginActivity.class); + intent.putExtra(AppConfig.EXTRA_MESSAGE, AppConfig.INTENT_LOGIN); + startActivity(intent); + finish(); + } + }) + .setIcon(android.R.drawable.ic_dialog_alert) + .show(); + } else { + String errorMsg = jObj.getString("error_msg"); + Log.e(TAG, "Error occured: "+errorMsg); + Toast.makeText(getApplicationContext(), getResources().getString(R.string.txt_errormsg_register), Toast.LENGTH_LONG).show(); + } + } catch (JSONException e) { + e.printStackTrace(); + } + } + }, new Response.ErrorListener() { + + @Override + public void onErrorResponse(VolleyError error) { + Log.e(TAG, "Registration Error: " + error.getMessage()); + Toast.makeText(getApplicationContext(), + getResources().getString(R.string.txt_errormsg_register), Toast.LENGTH_LONG).show(); + hideDialog(); + } + }) { + + @Override + protected Map getParams() { + Map params = new HashMap<>(); + params.put("tag", AppConfig.REST_REGISTER); + params.put("username", username); + params.put("email", email); + params.put("password", password); + + return params; + } + }; + } + + public void showMessage(String statusText){ Toast.makeText(this, statusText, Toast.LENGTH_LONG).show(); } diff --git a/app/src/main/java/org/deke/risk/riskahead/MainActivity.java b/app/src/main/java/org/deke/risk/riskahead/MainActivity.java index 5f49b6c..67a7028 100644 --- a/app/src/main/java/org/deke/risk/riskahead/MainActivity.java +++ b/app/src/main/java/org/deke/risk/riskahead/MainActivity.java @@ -30,7 +30,6 @@ import java.util.Map; public class MainActivity extends BaseActivity{ - private final static String mActivityTitle = "RiskAhead"; private final static String TAG = MainActivity.class.getSimpleName(); private Handler mHandler = new Handler(); @@ -41,10 +40,8 @@ public class MainActivity extends BaseActivity{ super.onCreate(savedInstanceState); userHasToBeLoggedIn(); - showDialog(); - registerBroadcastReceiver(); initButtons(); } @@ -194,6 +191,6 @@ public class MainActivity extends BaseActivity{ @Override protected String getActivityName() { - return mActivityTitle; + return getResources().getString(R.string.title_activity_start); } } diff --git a/app/src/main/java/org/deke/risk/riskahead/MapsActivity.java b/app/src/main/java/org/deke/risk/riskahead/MapsActivity.java index 4e7a686..e2dd155 100644 --- a/app/src/main/java/org/deke/risk/riskahead/MapsActivity.java +++ b/app/src/main/java/org/deke/risk/riskahead/MapsActivity.java @@ -65,7 +65,6 @@ import java.util.Map; public class MapsActivity extends BaseActivity implements LoaderManager.LoaderCallbacks, ClusterManager.OnClusterItemInfoWindowClickListener, ClusterManager.OnClusterClickListener, ClusterManager.OnClusterItemClickListener, OnMapReadyCallback { - private final static String mActivityTitle = "Risk Map"; private static final String TAG = MapsActivity.class.getSimpleName(); private static final int DEFAULT_ZOOM_LEVEL = 14; @@ -99,7 +98,6 @@ public class MapsActivity extends BaseActivity implements LoaderManager.LoaderCa protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); userHasToBeLoggedIn(); - registerBroadcastReceiver(); navDrawer.setSelection(mapAvtivityID, false); @@ -737,7 +735,7 @@ public class MapsActivity extends BaseActivity implements LoaderManager.LoaderCa @Override protected String getActivityName() { - return mActivityTitle; + return getResources().getString(R.string.title_activity_maps); } public void onBackPressed(){ diff --git a/app/src/main/java/org/deke/risk/riskahead/ProfileActivity.java b/app/src/main/java/org/deke/risk/riskahead/ProfileActivity.java index 0ae27e2..d099e99 100644 --- a/app/src/main/java/org/deke/risk/riskahead/ProfileActivity.java +++ b/app/src/main/java/org/deke/risk/riskahead/ProfileActivity.java @@ -14,14 +14,12 @@ import org.deke.risk.riskahead.helper.SessionManager; public class ProfileActivity extends BaseActivity{ - private final static String mActivityTitle = "User Statistics"; private final static String TAG = ProfileActivity.class.getSimpleName(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); userHasToBeLoggedIn(); - registerBroadcastReceiver(); Intent intent = getIntent(); String msg_intent = intent.getStringExtra(AppConfig.EXTRA_MESSAGE); @@ -109,7 +107,7 @@ public class ProfileActivity extends BaseActivity{ @Override protected String getActivityName() { - return mActivityTitle; + return getResources().getString(R.string.title_activity_user_config); } 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 58017ca..d3c184d 100644 --- a/app/src/main/java/org/deke/risk/riskahead/ReportWFActivity.java +++ b/app/src/main/java/org/deke/risk/riskahead/ReportWFActivity.java @@ -56,7 +56,6 @@ public class ReportWFActivity extends BaseActivity implements ReportWF_1_Fragmen ,ReportWF_4_Fragment.OnInputFinishedListener, ReportWF_5_Fragment.OnInputFinishedListener,ReportWF_6_Fragment.OnInputFinishedListener ,ReportWF_7_Fragment.OnInputFinishedListener, ReportWF_8_Fragment.OnInputFinishedListener, ReportWF_Finish_Fragment.SendReportListener { - private final static String mActivityTitle = "Report Incident"; private final static String TAG = ReportWFActivity.class.getSimpleName(); private List fragList = new ArrayList<>(); @@ -88,7 +87,6 @@ public class ReportWFActivity extends BaseActivity implements ReportWF_1_Fragmen @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - registerBroadcastReceiver(); initFragments(); initButtonsAndElements(); @@ -475,6 +473,6 @@ public class ReportWFActivity extends BaseActivity implements ReportWF_1_Fragmen @Override protected String getActivityName() { - return mActivityTitle; + return getResources().getString(R.string.title_activity_report_wf); } } diff --git a/app/src/main/java/org/deke/risk/riskahead/SettingsActivity.java b/app/src/main/java/org/deke/risk/riskahead/SettingsActivity.java index 6cc7a09..45e7843 100644 --- a/app/src/main/java/org/deke/risk/riskahead/SettingsActivity.java +++ b/app/src/main/java/org/deke/risk/riskahead/SettingsActivity.java @@ -8,7 +8,6 @@ import org.deke.risk.riskahead.helper.BaseActivity; public class SettingsActivity extends BaseActivity { - private final static String mActivityTitle = "Account Settings"; private final static String TAG = SettingsActivity.class.getSimpleName(); @@ -16,7 +15,6 @@ public class SettingsActivity extends BaseActivity { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); userHasToBeLoggedIn(); - registerBroadcastReceiver(); getFragmentManager().beginTransaction().replace(R.id.fragment_content, new SettingsFragment()).commit(); Log.d(TAG, "SettingsActivity created"); @@ -36,7 +34,7 @@ public class SettingsActivity extends BaseActivity { } @Override - protected String getActivityName() { return mActivityTitle; } + protected String getActivityName() { return getResources().getString(R.string.title_activity_settings); } 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 edbb2d9..592e895 100644 --- a/app/src/main/java/org/deke/risk/riskahead/SubscriptionsActivity.java +++ b/app/src/main/java/org/deke/risk/riskahead/SubscriptionsActivity.java @@ -39,7 +39,6 @@ import java.util.Map; public class SubscriptionsActivity extends BaseActivity{ - private final static String mActivityTitle = "Subscriptions"; private final static String TAG = SubscriptionsActivity.class.getSimpleName(); private TableLayout tblBillings; @@ -56,7 +55,6 @@ public class SubscriptionsActivity extends BaseActivity{ protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); userHasToBeLoggedIn(); - registerBroadcastReceiver(); tblBillings = (TableLayout) findViewById(R.id.tbl_billing); @@ -448,7 +446,7 @@ public class SubscriptionsActivity extends BaseActivity{ } @Override - protected String getActivityName() { return mActivityTitle; } + protected String getActivityName() { return getResources().getString(R.string.title_activity_subscriptions); } @Override public void onDestroy() { diff --git a/app/src/main/java/org/deke/risk/riskahead/ViewReportActivity.java b/app/src/main/java/org/deke/risk/riskahead/ViewReportActivity.java index af538f3..0d4b7db 100644 --- a/app/src/main/java/org/deke/risk/riskahead/ViewReportActivity.java +++ b/app/src/main/java/org/deke/risk/riskahead/ViewReportActivity.java @@ -39,7 +39,6 @@ import java.util.Map; public class ViewReportActivity extends BaseActivity { - private final static String mActivityTitle = "ViewReport"; private final static String TAG = ViewReportActivity.class.getSimpleName(); private EditText txtIncidentCategory; @@ -67,7 +66,6 @@ public class ViewReportActivity extends BaseActivity { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); userHasToBeLoggedIn(); - registerBroadcastReceiver(); showDialog(); @@ -149,7 +147,7 @@ public class ViewReportActivity extends BaseActivity { @Override protected String getActivityName() { - return mActivityTitle; + return getResources().getString(R.string.title_activity_view_report); } public void getIncident(Integer uid) { diff --git a/app/src/main/java/org/deke/risk/riskahead/helper/AppConfig.java b/app/src/main/java/org/deke/risk/riskahead/helper/AppConfig.java index 14fd143..d32b13c 100644 --- a/app/src/main/java/org/deke/risk/riskahead/helper/AppConfig.java +++ b/app/src/main/java/org/deke/risk/riskahead/helper/AppConfig.java @@ -14,6 +14,8 @@ public class AppConfig { public final static String URL_ABOUT = "http://www.riskahead.de/en/about/"; public final static String URL_CONTACT = "http://www.riskahead.de/en/contact-2/"; + public final static String URL_TERMS = "http://www.riskahead.de/en/terms/"; + public final static String URL_PRIVACY = "http://www.riskahead.de/en/privacy/"; /** INTENT MESSAGES **/ public final static String EXTRA_MESSAGE = "org.deke.risk.riskahead.MESSAGE"; @@ -38,6 +40,8 @@ public class AppConfig { /** REST WEBSERVICE **/ public final static String REST_LOGIN = "login"; public final static String REST_LOGIN_SOCIAL = "sociallogin"; + public final static String REST_LOGIN_EXISTS= "checkifuserexists"; + public final static String REST_LOGIN_EXISTS_SOCIAL = "checkifsocialuserexists"; public final static String REST_REGISTER = "register"; public final static String REST_RESENDACTIVATIONMAIL = "resendactivationusermail"; public final static String REST_ACTIVATEUSER = "activateuser"; 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 defda4c..1c57108 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 @@ -10,6 +10,9 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.IntentFilter; +import android.content.pm.PackageManager; +import android.content.res.Configuration; +import android.content.res.Resources; import android.graphics.drawable.ColorDrawable; import android.net.ConnectivityManager; import android.net.NetworkInfo; @@ -20,14 +23,18 @@ import android.support.v4.view.LayoutInflaterCompat; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.text.format.DateUtils; +import android.text.method.LinkMovementMethod; +import android.util.DisplayMetrics; import android.util.Log; import android.view.Gravity; +import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.Window; import android.widget.EditText; import android.widget.LinearLayout; +import android.widget.TextView; import android.widget.Toast; import com.android.volley.Request; @@ -37,7 +44,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.maps.model.LatLng; import com.mikepenz.google_material_typeface_library.GoogleMaterial; import com.mikepenz.iconics.context.IconicsLayoutInflater; import com.mikepenz.materialdrawer.AccountHeader; @@ -62,6 +68,7 @@ import org.json.JSONException; import org.json.JSONObject; import java.util.HashMap; +import java.util.Locale; import java.util.Map; public abstract class BaseActivity extends AppCompatActivity { @@ -86,6 +93,8 @@ public abstract class BaseActivity extends AppCompatActivity { public Drawer navDrawer = null; public Toolbar mToolbar; + private BroadcastReceiver myReceiver; + private static final int TIME_INTERVAL = 2000; // # milliseconds, desired time passed between two back presses. private long mBackPressed; @@ -144,23 +153,49 @@ public abstract class BaseActivity extends AppCompatActivity { } + class LogoutReceiver extends BroadcastReceiver { + @Override + public void onReceive(Context context, Intent intent) { + Log.d("onReceive", "Logout in progress"); + finish(); + } + } + + @Override + protected void onPause(){ + super.onPause(); + unregisterBroadcastReceiver(); + + } + + @Override + protected void onResume(){ + super.onResume(); + registerBroadcastReceiver(); + + } + public void registerBroadcastReceiver(){ IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(AppConfig.INTENT_LOGOUT); - registerReceiver(new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - Log.d("onReceive", "Logout in progress"); - finish(); - } - }, intentFilter); + myReceiver = new LogoutReceiver(); + registerReceiver(myReceiver, intentFilter); + } + + public void unregisterBroadcastReceiver(){ + try{ + unregisterReceiver(myReceiver); + }catch(final Exception e){ + e.printStackTrace(); + //no receiver registered - no problem + } } private void initProgressDialog() { pDialog = new Dialog(this); pDialog.requestWindowFeature(Window.FEATURE_NO_TITLE); pDialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT)); - pDialog.setContentView(R.layout.progress_circle); + pDialog.setContentView(R.layout.dialog_progresscircle); } private void initAds() { @@ -345,6 +380,8 @@ public abstract class BaseActivity extends AppCompatActivity { Intent broadcastIntent = new Intent(); broadcastIntent.setAction(AppConfig.INTENT_LOGOUT); sendBroadcast(broadcastIntent); + + stopService(new Intent(BaseActivity.this, NotificationService.class)); finish(); } @@ -372,12 +409,14 @@ public abstract class BaseActivity extends AppCompatActivity { intent = new Intent(getApplicationContext(), ReportWFActivity.class); intent.putExtra(EXTRA_MESSAGE, position); startActivity(intent); + finish(); } public void gotoMapActivity(){ Intent intent; intent = new Intent(BaseActivity.this, MapsActivity.class); BaseActivity.this.startActivity(intent); + finish(); } public void gotoMapActivity(String position){ @@ -385,6 +424,7 @@ public abstract class BaseActivity extends AppCompatActivity { intent = new Intent(getApplicationContext(), MapsActivity.class); intent.putExtra(EXTRA_MESSAGE, position); startActivity(intent); + finish(); } public void getNotifyLocationFromMapActivity(){ @@ -392,6 +432,7 @@ public abstract class BaseActivity extends AppCompatActivity { intent = new Intent(getApplicationContext(), MapsActivity.class); intent.putExtra(AppConfig.EXTRA_MAP_TYPE, AppConfig.INTENT_MAP_GETNOTIFY); startActivity(intent); + finish(); } public void getIncidentLocationFromMapActivity(){ @@ -399,6 +440,7 @@ public abstract class BaseActivity extends AppCompatActivity { intent = new Intent(getApplicationContext(), MapsActivity.class); intent.putExtra(AppConfig.EXTRA_MAP_TYPE, AppConfig.INTENT_MAP_GETINCLOC); startActivity(intent); + finish(); } public void getNotifyLocationFromMapActivity(String position){ @@ -407,6 +449,7 @@ public abstract class BaseActivity extends AppCompatActivity { intent.putExtra(EXTRA_MESSAGE, position); intent.putExtra(AppConfig.EXTRA_MAP_TYPE, AppConfig.INTENT_MAP_GETNOTIFY); startActivity(intent); + finish(); } public void getIncidentLocationFromMapActivity(String position){ @@ -415,12 +458,14 @@ public abstract class BaseActivity extends AppCompatActivity { intent.putExtra(EXTRA_MESSAGE, position); intent.putExtra(AppConfig.EXTRA_MAP_TYPE, AppConfig.INTENT_MAP_GETINCLOC); startActivity(intent); + finish(); } public void gotoProfileActivity(){ Intent intent; intent = new Intent(getApplicationContext(), ProfileActivity.class); startActivity(intent); + finish(); } public void gotoProfileActivity(String uid){ @@ -428,18 +473,21 @@ public abstract class BaseActivity extends AppCompatActivity { intent = new Intent(getApplicationContext(), ProfileActivity.class); intent.putExtra(EXTRA_MESSAGE, uid); startActivity(intent); + finish(); } public void gotoSettingsActivity(){ Intent intent; intent = new Intent(getApplicationContext(), SettingsActivity.class); startActivity(intent); + finish(); } public void gotoSubscriptionsActivity(){ Intent intent; intent = new Intent(getApplicationContext(), SubscriptionsActivity.class); startActivity(intent); + finish(); } public void gotoViewReportActivity(Integer uid){ @@ -447,6 +495,7 @@ public abstract class BaseActivity extends AppCompatActivity { intent = new Intent(getApplicationContext(), ViewReportActivity.class); intent.putExtra(EXTRA_MESSAGE, uid); startActivity(intent); + finish(); } @Override @@ -459,8 +508,9 @@ public abstract class BaseActivity extends AppCompatActivity { intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); }else if((id == R.id.menu_action_about)){ - Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://www.riskahead.net/about/")); - startActivity(browserIntent); + showAboutInfoDialog(); + }else if((id == R.id.menu_action_language)){ + showLanguageDialog(); }else if((id == R.id.menu_action_help)){ Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://www.riskahead.net/contact/")); startActivity(browserIntent); @@ -471,6 +521,68 @@ public abstract class BaseActivity extends AppCompatActivity { return super.onOptionsItemSelected(item); } + private void showLanguageDialog(){ + AlertDialog.Builder b = new AlertDialog.Builder(this); + b.setTitle(R.string.txt_language_title); + String[] types = {"de - Deutsch", "en - English"}; + b.setItems(types, new DialogInterface.OnClickListener() { + + @Override + public void onClick(DialogInterface dialog, int which) { + + dialog.dismiss(); + switch(which){ + case 0: + setLocale("de"); + break; + case 1: + setLocale("en"); + break; + } + } + + }); + + b.show(); + } + + public void setLocale(String lang) { + Locale myLocale = new Locale(lang); + Resources res = getResources(); + DisplayMetrics dm = res.getDisplayMetrics(); + Configuration conf = res.getConfiguration(); + conf.locale = myLocale; + res.updateConfiguration(conf, dm); + Intent refresh = new Intent(this, this.getClass()); + startActivity(refresh); + finish(); + } + + private void showAboutInfoDialog() { + LayoutInflater inflater = getLayoutInflater(); + View dialoglayout = inflater.inflate(R.layout.dialog_about, null); + + ((TextView) dialoglayout.findViewById(R.id.txt_about_homepage)).setMovementMethod(LinkMovementMethod.getInstance()); + ((TextView) dialoglayout.findViewById(R.id.txt_about_privacy)).setMovementMethod(LinkMovementMethod.getInstance()); + ((TextView) dialoglayout.findViewById(R.id.txt_about_terms)).setMovementMethod(LinkMovementMethod.getInstance()); + + try { + ((TextView) dialoglayout.findViewById(R.id.lbl_about_version)).setText("Version: "+ getPackageManager().getPackageInfo(getPackageName(), 0).versionName); + } catch (PackageManager.NameNotFoundException e) { + e.printStackTrace(); + } + + AlertDialog.Builder builder = new AlertDialog.Builder(BaseActivity.this) + .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + //do nothing + } + }); + + builder.setView(dialoglayout); + builder.show(); + } + private void showFeedbackDialog() { AlertDialog.Builder alert=new AlertDialog.Builder(this); alert.setTitle(R.string.menu_action_feedback); diff --git a/app/src/main/java/org/deke/risk/riskahead/helper/NotificationService.java b/app/src/main/java/org/deke/risk/riskahead/helper/NotificationService.java index 5967697..eac8479 100644 --- a/app/src/main/java/org/deke/risk/riskahead/helper/NotificationService.java +++ b/app/src/main/java/org/deke/risk/riskahead/helper/NotificationService.java @@ -43,7 +43,6 @@ public class NotificationService extends Service { public HashMap user; public LocationManager locationManager; - public LatLng myPosition; public NotificationService() { super(); @@ -120,7 +119,7 @@ public class NotificationService extends Service { Log.d(this.toString(), "Run Notification Task. Notifications enabled = " + notifyEnabled); - if(notifyEnabled){ + if(notifyEnabled && session.isLoggedIn()){ if ((myPosition != null) && (myPosition.latitude != 0.0) && (myPosition.longitude != 0.0)) { session.setNotificationServiceReady(true); String lastNotificationTime; diff --git a/app/src/main/res/layout/activity_login.xml b/app/src/main/res/layout/activity_login.xml index d35cbfb..1a1adeb 100644 --- a/app/src/main/res/layout/activity_login.xml +++ b/app/src/main/res/layout/activity_login.xml @@ -64,30 +64,23 @@ android:text="@string/btn_start_login" android:textColor="@color/white" /> + + - + diff --git a/app/src/main/res/layout/activity_register.xml b/app/src/main/res/layout/activity_register.xml index 708bda9..0cc2ea1 100644 --- a/app/src/main/res/layout/activity_register.xml +++ b/app/src/main/res/layout/activity_register.xml @@ -81,16 +81,7 @@ android:text="@string/btn_start_register" android:textColor="@color/white" /> - + diff --git a/app/src/main/res/layout/activity_report_wf.xml b/app/src/main/res/layout/activity_report_wf.xml index 8cf2000..96bf540 100644 --- a/app/src/main/res/layout/activity_report_wf.xml +++ b/app/src/main/res/layout/activity_report_wf.xml @@ -82,6 +82,15 @@ android:clickable="true" android:src="@android:drawable/ic_dialog_map" /> + + - - + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/progress_circle.xml b/app/src/main/res/layout/dialog_progresscircle.xml similarity index 100% rename from app/src/main/res/layout/progress_circle.xml rename to app/src/main/res/layout/dialog_progresscircle.xml diff --git a/app/src/main/res/menu/menu_common.xml b/app/src/main/res/menu/menu_common.xml index 94715f4..22596c7 100644 --- a/app/src/main/res/menu/menu_common.xml +++ b/app/src/main/res/menu/menu_common.xml @@ -8,6 +8,8 @@ android:orderInCategory="100" app:showAsAction="never" /> + diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 30b9dbd..9c8730d 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -230,6 +230,17 @@ AUS Hole dir die Premium-Mitgliedschaft um die ganze Karte zu sehen! + Bitte bestätige, dass du mit der Registrierung bei RiskAhead die Datenschutzbestimmungen und Nutzungsbedingungen gelesen hast und damit einverstanden bist. + Mit der Auswahl dieser Kontrollbox erkläre ich mich mit den Datenschutz- und Nutzungsbedingungen einverstanden + Deine Privatsphäre ist uns sehr wichtig + Entwickelt von + Datenschutzerklärung: http://www.riskahead.de/en/privacy/ + Nutzungsbedingungen: http://www.riskahead.de/en/terms/ + Website: http://www.riskahead.net + RiskAhead for Android + Sprache + Ändere Sprache + Allgemeiner Vorfall/Situation Mündliche Gewalt diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 5f2d267..2a6733e 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -24,9 +24,9 @@ #222222 #999999 - #888888 + #afafaf #3b4148 - #5e6266 + #8c9094 #1175b7 \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 5e2c831..17a91c2 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -237,6 +237,17 @@ OFF Get Premiuim to view the Full Map! + Please confirm that you have read our Privacy Policy and Terms of Service and you accept these by using RiskAhead. + By checking this checkbox I hereby confirm that I accept the terms of service and privacy policy + Your privacy is very important to us + Dveloped from + Privacy Policy: http://www.riskahead.de/en/privacy/ + Terms of Service: http://www.riskahead.de/en/terms/ + Website: http://www.riskahead.net + RiskAhead for Android + Language + Change Language + A Threatening Incident or Situation Verbal Violence