diff --git a/app/app.iml b/app/app.iml index 6d8405c..98ebd3f 100644 --- a/app/app.iml +++ b/app/app.iml @@ -35,6 +35,7 @@ + @@ -73,7 +74,7 @@ - + @@ -99,6 +100,7 @@ + @@ -116,8 +118,8 @@ - + @@ -127,6 +129,7 @@ + @@ -144,7 +147,6 @@ - \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index e25a6a0..78b4796 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -40,7 +40,7 @@ dependencies { compile 'com.android.support:appcompat-v7:22.2.0' compile 'com.google.android.gms:play-services:7.5.0' compile 'com.facebook.android:facebook-android-sdk:4.1.0' - compile 'com.beardedhen:androidbootstrap:2.0.0' + compile 'com.beardedhen:androidbootstrap:2.0.1' compile 'com.mcxiaoke.volley:library:1.0.+' compile('com.twitter.sdk.android:twitter-core:1.4.1@aar') { transitive = true; diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c9f2f16..b89fdd0 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,6 +1,6 @@ + package="org.deke.risk.riskahead"> @@ -18,7 +18,7 @@ android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" - android:theme="@style/CustomActionBarTheme" > + android:theme="@style/CustomActionBarTheme"> - - - + android:label="@string/title_activity_start" + android:screenOrientation="portrait"> + - + android:parentActivityName=".StartActivity" + android:screenOrientation="portrait"> - - - - + android:theme="@android:style/Theme.Translucent.NoTitleBar"> - - + android:parentActivityName=".LoginActivity" + android:screenOrientation="portrait"> + android:parentActivityName=".MainActivity" + android:screenOrientation="portrait"> + - @@ -106,43 +101,37 @@ - - + android:parentActivityName=".MainActivity" + android:screenOrientation="portrait"> - - + android:label="@string/title_activity_report" + android:screenOrientation="portrait"> - - + android:label="@string/title_activity_settings" + android:screenOrientation="portrait"> - - + android:label="@string/title_activity_subscriptions" + android:screenOrientation="portrait"> + android:parentActivityName=".ProfileActivity" + android:screenOrientation="portrait"> - - + android:label="@string/title_activity_view_report" + android:screenOrientation="portrait"> + + diff --git a/app/src/main/java/org/deke/risk/riskahead/LoginActivity.java b/app/src/main/java/org/deke/risk/riskahead/LoginActivity.java index 4475390..beb4335 100644 --- a/app/src/main/java/org/deke/risk/riskahead/LoginActivity.java +++ b/app/src/main/java/org/deke/risk/riskahead/LoginActivity.java @@ -144,7 +144,7 @@ public class LoginActivity extends AppCompatActivity implements FacebookButtonFr @Override public boolean onCreateOptionsMenu(Menu menu) { - getMenuInflater().inflate(R.menu.menu_login, menu); + getMenuInflater().inflate(R.menu.menu_common, menu); return true; } 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 b40f431..e81010e 100644 --- a/app/src/main/java/org/deke/risk/riskahead/MapsActivity.java +++ b/app/src/main/java/org/deke/risk/riskahead/MapsActivity.java @@ -324,6 +324,7 @@ public class MapsActivity extends BaseActivity implements LoaderManager.LoaderCa @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_maps, menu); + getMenuInflater().inflate(R.menu.menu_common, menu); SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); SearchView searchView = (SearchView) menu.findItem(R.id.location_search).getActionView(); diff --git a/app/src/main/java/org/deke/risk/riskahead/ReportWFActivity.java b/app/src/main/java/org/deke/risk/riskahead/ReportWFActivity.java new file mode 100644 index 0000000..533a871 --- /dev/null +++ b/app/src/main/java/org/deke/risk/riskahead/ReportWFActivity.java @@ -0,0 +1,102 @@ +package org.deke.risk.riskahead; + +import android.app.Fragment; +import android.app.FragmentTransaction; +import android.os.Bundle; +import android.view.Menu; +import android.view.View; + +import com.beardedhen.androidbootstrap.BootstrapButton; + +import org.deke.risk.riskahead.fragments.ReportWF_1_Fragment; +import org.deke.risk.riskahead.fragments.ReportWF_2_Fragment; +import org.deke.risk.riskahead.helper.BaseActivity; + +import java.util.ArrayList; +import java.util.List; + +public class ReportWFActivity extends BaseActivity implements ReportWF_1_Fragment.OnInputFinishedListener, ReportWF_2_Fragment.OnInputFinishedListener { + + private final static String mActivityTitle = "Report NEW"; + private final static String TAG = ReportWFActivity.class.getSimpleName(); + + List fragList = new ArrayList(); + + Fragment frag_report_1 = new ReportWF_1_Fragment(); + Fragment frag_report_2 = new ReportWF_2_Fragment(); + + BootstrapButton btnContinue; + BootstrapButton btnReportNow; + + private int currentState = 0; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + //setContentView(R.layout.activity_report_wf); + + fragList.add(frag_report_1); + fragList.add(frag_report_2); + + initFragment(currentState); + + btnContinue = (BootstrapButton) findViewById(R.id.btn_reportwf_next); + btnContinue.setVisibility(View.INVISIBLE); + btnContinue.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + initFragment(currentState+1); + } + }); + + + btnReportNow = (BootstrapButton) findViewById(R.id.btn_reportwf_reportnow); + btnReportNow.setVisibility(View.INVISIBLE); + } + + private void initFragment(int state) { + FragmentTransaction transaction = getFragmentManager().beginTransaction(); + + transaction.replace(R.id.fragment_reportwf, fragList.get(state)); + transaction.addToBackStack(null); + + transaction.commit(); + + if(state > 1) btnReportNow.setVisibility(View.VISIBLE); + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + getMenuInflater().inflate(R.menu.menu_reportwf, menu); + getMenuInflater().inflate(R.menu.menu_common, menu); + + return true; + } + + @Override + protected int getLayoutResourceId() { + return R.layout.activity_report_wf; + } + + @Override + protected String getActivityName() { + return mActivityTitle; + } + + @Override + public void onInputFinished(boolean finished) { + if(finished) { + btnContinue.setVisibility(View.VISIBLE); + }else{ + btnContinue.setVisibility(View.INVISIBLE); + } + + if(finished && (currentState == 1)){ + btnReportNow.setVisibility(View.VISIBLE); + } else if (currentState > 1) { + btnReportNow.setVisibility(View.VISIBLE); + } else { + btnReportNow.setVisibility(View.INVISIBLE); + } + } +} diff --git a/app/src/main/java/org/deke/risk/riskahead/fragments/ReportWF_1_Fragment.java b/app/src/main/java/org/deke/risk/riskahead/fragments/ReportWF_1_Fragment.java new file mode 100644 index 0000000..0e37993 --- /dev/null +++ b/app/src/main/java/org/deke/risk/riskahead/fragments/ReportWF_1_Fragment.java @@ -0,0 +1,185 @@ +package org.deke.risk.riskahead.fragments; + +import android.app.Activity; +import android.app.Fragment; +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.ArrayAdapter; +import android.widget.EditText; +import android.widget.Spinner; + +import com.beardedhen.androidbootstrap.AwesomeTextView; + +import org.deke.risk.riskahead.R; +import org.deke.risk.riskahead.helper.HintAdapter; + +/** + * Created by Dennis on 04.12.2015. + */ +public class ReportWF_1_Fragment extends Fragment{ + + private View mainview; + + Spinner spinner_main_1; + Spinner spinner_sub_1; + + OnInputFinishedListener mCallback; + + public interface OnInputFinishedListener { + void onInputFinished(boolean finished); + } + + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) { + mainview = inflater.inflate(R.layout.fragment_reportwf_1, container, false); + + initSpinnerOneMain(); + initSpinnerOneSub(); + + return mainview; + } + + private void isFinished(boolean isFinished){ + if(isFinished){ + mainview.findViewById(R.id.atv_reportwf_1_finish).setVisibility(View.VISIBLE); + }else{ + mainview.findViewById(R.id.atv_reportwf_1_finish).setVisibility(View.INVISIBLE); + } + + mCallback.onInputFinished(isFinished); + } + + private void initSpinnerOneMain() { + spinner_main_1 = (Spinner) mainview.findViewById(R.id.dd_reportwf_1_cat_main); + + ArrayAdapter adapter_main_1 = ArrayAdapter.createFromResource(getActivity(), + R.array.cat_situation_main, android.R.layout.simple_spinner_dropdown_item); + adapter_main_1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + spinner_main_1.setAdapter(new HintAdapter(adapter_main_1, R.layout.contact_spinner_row_nothing_selected, getActivity())); + + spinner_main_1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { + @Override + public void onItemSelected(AdapterView parent, View view, int position, long id) { + int stringid = 0; + + switch (position) { + case 1: + stringid = R.array.cat_situation_sub_general; + break; + case 2: + stringid = R.array.cat_situation_sub_verbal; + break; + case 3: + stringid = R.array.cat_situation_sub_force; + break; + case 4: + stringid = R.array.cat_situation_sub_force_serious; + break; + case 5: + stringid = R.array.cat_situation_sub_nature; + break; + case 6: + stringid = R.array.cat_situation_sub_infrastructure; + break; + default: + stringid = R.array.cat_situation_sub_general; + break; + } + + Spinner spinner_sub_1 = (Spinner) mainview.findViewById(R.id.dd_reportwf_1_cat_sub); + ArrayAdapter adapter_sub_1 = ArrayAdapter.createFromResource(mainview.getContext(), + stringid, android.R.layout.simple_spinner_dropdown_item); + adapter_sub_1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + spinner_sub_1.setAdapter(new HintAdapter(adapter_sub_1, R.layout.contact_spinner_row_nothing_selected, getActivity())); + + if (((HintAdapter) spinner_main_1.getAdapter()).isInInitialState()){ + spinner_sub_1.setVisibility(View.INVISIBLE); + }else{ + spinner_sub_1.setVisibility(View.VISIBLE); + } + + isFinished(false); + } + + @Override + public void onNothingSelected(AdapterView parentView) { + // your code here + } + }); + } + + private void initSpinnerOneSub() { + spinner_sub_1 = (Spinner) mainview.findViewById(R.id.dd_reportwf_1_cat_sub); + spinner_sub_1.setVisibility(View.INVISIBLE); + spinner_sub_1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { + + @Override + public void onItemSelected(AdapterView parent, View view, int position, long id) { + int i = 99; + + switch (((Spinner) mainview.findViewById(R.id.dd_reportwf_1_cat_main)).getSelectedItemPosition()) { + case 1: + i = 7; + break; + case 2: + i = 5; + break; + case 3: + i = 6; + break; + case 4: + i = 7; + break; + case 5: + i = 7; + break; + case 6: + i = 8; + break; + } + + if (position == i) { + mainview.findViewById(R.id.txt_reportwf_1_cat_etc).setVisibility(View.VISIBLE); + } else { + mainview.findViewById(R.id.txt_reportwf_1_cat_etc).setVisibility(View.INVISIBLE); + } + + if (((HintAdapter) spinner_sub_1.getAdapter()).isInInitialState()){ + isFinished(false); + }else{ + isFinished(true); + } + } + + @Override + public void onNothingSelected(AdapterView parent) { + } + }); + } + + @Override + public void onAttach(Activity activity) { + super.onAttach(activity); + + try { + mCallback = (OnInputFinishedListener) activity; + } catch (ClassCastException e) { + throw new ClassCastException(activity.toString() + + " must implement OnInputFinishedListener"); + } + } + + @Override + public void onDetach() { + super.onDetach(); + } +} diff --git a/app/src/main/java/org/deke/risk/riskahead/fragments/ReportWF_2_Fragment.java b/app/src/main/java/org/deke/risk/riskahead/fragments/ReportWF_2_Fragment.java new file mode 100644 index 0000000..de1f1d2 --- /dev/null +++ b/app/src/main/java/org/deke/risk/riskahead/fragments/ReportWF_2_Fragment.java @@ -0,0 +1,185 @@ +package org.deke.risk.riskahead.fragments; + +import android.app.Activity; +import android.app.Fragment; +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.ArrayAdapter; +import android.widget.EditText; +import android.widget.RelativeLayout; +import android.widget.Spinner; +import android.widget.TextView; + +import com.beardedhen.androidbootstrap.AwesomeTextView; + +import org.deke.risk.riskahead.R; +import org.deke.risk.riskahead.helper.HintAdapter; + +/** + * Created by Dennis on 08.12.2015. + */ +public class ReportWF_2_Fragment extends Fragment{ + + View mainview; + + Spinner spinner_main_1; + Spinner spinner_sub_1; + + OnInputFinishedListener mCallback; + + public interface OnInputFinishedListener { + void onInputFinished(boolean finished); + } + + private void isFinished(boolean isFinished){ + if(isFinished){ + mainview.findViewById(R.id.atv_reportwf_2_finish).setVisibility(View.VISIBLE); + }else{ + mainview.findViewById(R.id.atv_reportwf_2_finish).setVisibility(View.INVISIBLE); + } + + mCallback.onInputFinished(isFinished); + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + } + + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) { + mainview = inflater.inflate(R.layout.fragment_reportwf_2, container, false); + + initSpinnerOneMain(); + initSpinnerOneSub(); + + initLayoutFromTime(); + initLayoutToTime(); + + return mainview; + } + + private void initLayoutToTime() { + RelativeLayout rlFromTime = (RelativeLayout) mainview.findViewById(R.id.ll_report_to_time); + rlFromTime.setVisibility(View.INVISIBLE); + } + + private void initLayoutFromTime() { + RelativeLayout rlFromTime = (RelativeLayout) mainview.findViewById(R.id.ll_report_from_time); + rlFromTime.setVisibility(View.INVISIBLE); + } + + private void initSpinnerOneSub() { + spinner_sub_1 = (Spinner) mainview.findViewById(R.id.dd_reportwf_2_time_sub); + spinner_sub_1.setVisibility(View.INVISIBLE); + spinner_sub_1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { + @Override + public void onItemSelected(AdapterView parent, View view, int position, long id) { + if(((HintAdapter) spinner_sub_1.getAdapter()).isInInitialState()){ + isFinished(false); + } else { + isFinished(true); + } + } + + @Override + public void onNothingSelected(AdapterView parent) { + + } + }); + } + + private void initSpinnerOneMain() { + spinner_main_1 = (Spinner) mainview.findViewById(R.id.dd_reportwf_2_time_main); + + ArrayAdapter adapter_main_1 = ArrayAdapter.createFromResource(getActivity(), + R.array.cat_time_main, android.R.layout.simple_spinner_dropdown_item); + adapter_main_1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + spinner_main_1.setAdapter(new HintAdapter(adapter_main_1, R.layout.contact_spinner_row_nothing_selected, getActivity())); + + spinner_main_1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { + @Override + public void onItemSelected(AdapterView parent, View view, int position, long id) { + int stringid = 0; + + switch (position) { + case 1: + mainview.findViewById(R.id.ll_report_from_time).setVisibility(View.INVISIBLE); + mainview.findViewById(R.id.ll_report_to_time).setVisibility(View.INVISIBLE); + mainview.findViewById(R.id.dd_reportwf_2_time_sub).setVisibility(View.INVISIBLE); + isFinished(true); + break; + case 2: + mainview.findViewById(R.id.ll_report_from_time).setVisibility(View.INVISIBLE); + mainview.findViewById(R.id.ll_report_to_time).setVisibility(View.INVISIBLE); + stringid = R.array.cat_time_sub_periodical; + break; + case 3: + mainview.findViewById(R.id.ll_report_from_time).setVisibility(View.VISIBLE); + mainview.findViewById(R.id.ll_report_to_time).setVisibility(View.INVISIBLE); + mainview.findViewById(R.id.dd_reportwf_2_time_sub).setVisibility(View.INVISIBLE); + break; + case 4: + mainview.findViewById(R.id.ll_report_from_time).setVisibility(View.VISIBLE); + mainview.findViewById(R.id.ll_report_to_time).setVisibility(View.VISIBLE); + mainview.findViewById(R.id.dd_reportwf_2_time_sub).setVisibility(View.INVISIBLE); + break; + case 5: + mainview.findViewById(R.id.ll_report_from_time).setVisibility(View.INVISIBLE); + mainview.findViewById(R.id.ll_report_to_time).setVisibility(View.INVISIBLE); + mainview.findViewById(R.id.dd_reportwf_2_time_sub).setVisibility(View.INVISIBLE); + isFinished(true); + break; + default: + mainview.findViewById(R.id.ll_report_from_time).setVisibility(View.INVISIBLE); + mainview.findViewById(R.id.ll_report_to_time).setVisibility(View.INVISIBLE); + mainview.findViewById(R.id.dd_reportwf_2_time_sub).setVisibility(View.INVISIBLE); + isFinished(false); + break; + } + + if(!((HintAdapter) spinner_main_1.getAdapter()).isInInitialState() && stringid != 0) { + ArrayAdapter adapter_sub_1 = ArrayAdapter.createFromResource(mainview.getContext(), + stringid, android.R.layout.simple_spinner_dropdown_item); + adapter_sub_1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + spinner_sub_1.setAdapter(new HintAdapter(adapter_sub_1, R.layout.contact_spinner_row_nothing_selected, getActivity())); + spinner_sub_1.setVisibility(View.VISIBLE); + } else if(stringid == 0) { + spinner_sub_1.setVisibility(View.INVISIBLE); + } + + if(((HintAdapter) spinner_main_1.getAdapter()).isInInitialState()){ + isFinished(false); + } + } + + @Override + public void onNothingSelected(AdapterView parentView) { + // your code here + } + }); + } + + + @Override + public void onAttach(Activity activity) { + super.onAttach(activity); + + try { + mCallback = (OnInputFinishedListener) activity; + } catch (ClassCastException e) { + throw new ClassCastException(activity.toString() + + " must implement OnInputFinishedListener"); + } + } + + @Override + public void onDetach() { + super.onDetach(); + } + +} 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 5d32cc7..191f96c 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 @@ -34,6 +34,7 @@ import org.deke.risk.riskahead.MapsActivity; import org.deke.risk.riskahead.R; import org.deke.risk.riskahead.ReportActivity; import org.deke.risk.riskahead.ProfileActivity; +import org.deke.risk.riskahead.ReportWFActivity; import org.deke.risk.riskahead.ReportlistActivity; import org.deke.risk.riskahead.SettingsActivity; import org.deke.risk.riskahead.SubscriptionsActivity; @@ -126,8 +127,9 @@ public abstract class BaseActivity extends AppCompatActivity { } public void showAd(){ + // TODO: 03.12.2015 activate when needed if (mInterstitialAd.isLoaded()) { - mInterstitialAd.show(); + // mInterstitialAd.show(); } } @@ -175,8 +177,6 @@ public abstract class BaseActivity extends AppCompatActivity { setShareIntent(); */ - getMenuInflater().inflate(R.menu.menu_login, menu); - return true; } @@ -254,13 +254,7 @@ public abstract class BaseActivity extends AppCompatActivity { public void gotoReportActivity(){ Intent intent; - intent = new Intent(getApplicationContext(), ReportActivity.class); - startActivity(intent); - } - - public void gotoReportlistActivity(){ - Intent intent; - intent = new Intent(getApplicationContext(), ReportlistActivity.class); + intent = new Intent(getApplicationContext(), ReportWFActivity.class); startActivity(intent); } @@ -271,6 +265,12 @@ public abstract class BaseActivity extends AppCompatActivity { startActivity(intent); } + public void gotoReportlistActivity(){ + Intent intent; + intent = new Intent(getApplicationContext(), ReportlistActivity.class); + startActivity(intent); + } + public void gotoMapActivity(){ Intent intent; intent = new Intent(getApplicationContext(), MapsActivity.class); diff --git a/app/src/main/java/org/deke/risk/riskahead/helper/HintAdapter.java b/app/src/main/java/org/deke/risk/riskahead/helper/HintAdapter.java new file mode 100644 index 0000000..6414764 --- /dev/null +++ b/app/src/main/java/org/deke/risk/riskahead/helper/HintAdapter.java @@ -0,0 +1,171 @@ +package org.deke.risk.riskahead.helper; + +/** + * Created by Dennis on 06.12.2015. + */ +import android.content.Context; +import android.database.DataSetObserver; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ListAdapter; +import android.widget.SpinnerAdapter; + +/** + * Decorator Adapter to allow a Spinner to show a 'Nothing Selected...' initially + * displayed instead of the first choice in the Adapter. + */ +public class HintAdapter implements SpinnerAdapter, ListAdapter { + + protected static final int EXTRA = 1; + protected SpinnerAdapter adapter; + protected Context context; + protected int nothingSelectedLayout; + protected int nothingSelectedDropdownLayout; + protected LayoutInflater layoutInflater; + private boolean isInInitialState = false; + + /** + * Use this constructor to have NO 'Select One...' item, instead use + * the standard prompt or nothing at all. + * @param spinnerAdapter wrapped Adapter. + * @param nothingSelectedLayout layout for nothing selected, perhaps + * you want text grayed out like a prompt... + * @param context + */ + public HintAdapter( + SpinnerAdapter spinnerAdapter, + int nothingSelectedLayout, Context context) { + + this(spinnerAdapter, nothingSelectedLayout, -1, context); + } + + /** + * Use this constructor to Define your 'Select One...' layout as the first + * row in the returned choices. + * If you do this, you probably don't want a prompt on your spinner or it'll + * have two 'Select' rows. + * @param spinnerAdapter wrapped Adapter. Should probably return false for isEnabled(0) + * @param nothingSelectedLayout layout for nothing selected, perhaps you want + * text grayed out like a prompt... + * @param nothingSelectedDropdownLayout layout for your 'Select an Item...' in + * the dropdown. + * @param context + */ + public HintAdapter(SpinnerAdapter spinnerAdapter, int nothingSelectedLayout, int nothingSelectedDropdownLayout, Context context) { + this.adapter = spinnerAdapter; + this.context = context; + this.nothingSelectedLayout = nothingSelectedLayout; + this.nothingSelectedDropdownLayout = nothingSelectedDropdownLayout; + layoutInflater = LayoutInflater.from(context); + } + + @Override + public final View getView(int position, View convertView, ViewGroup parent) { + // This provides the View for the Selected Item in the Spinner, not + // the dropdown (unless dropdownView is not set). + if (position == 0) { + isInInitialState = true; + return getNothingSelectedView(parent); + } + isInInitialState = false; + return adapter.getView(position - EXTRA, null, parent); // Could re-use + // the convertView if possible. + } + + /** + * View to show in Spinner with Nothing Selected + * Override this to do something dynamic... e.g. "37 Options Found" + * @param parent + * @return + */ + protected View getNothingSelectedView(ViewGroup parent) { + return layoutInflater.inflate(nothingSelectedLayout, parent, false); + } + + @Override + public View getDropDownView(int position, View convertView, ViewGroup parent) { + // Android BUG! http://code.google.com/p/android/issues/detail?id=17128 - + // Spinner does not support multiple view types + if (position == 0) { + return nothingSelectedDropdownLayout == -1 ? + new View(context) : + getNothingSelectedDropdownView(parent); + } + + // Could re-use the convertView if possible, use setTag... + return adapter.getDropDownView(position - EXTRA, null, parent); + } + + /** + * Override this to do something dynamic... For example, "Pick your favorite + * of these 37". + * @param parent + * @return + */ + protected View getNothingSelectedDropdownView(ViewGroup parent) { + return layoutInflater.inflate(nothingSelectedDropdownLayout, parent, false); + } + + @Override + public int getCount() { + int count = adapter.getCount(); + return count == 0 ? 0 : count + EXTRA; + } + + @Override + public Object getItem(int position) { + return position == 0 ? null : adapter.getItem(position - EXTRA); + } + + @Override + public int getItemViewType(int position) { + return 0; + } + + @Override + public int getViewTypeCount() { + return 1; + } + + @Override + public long getItemId(int position) { + return position >= EXTRA ? adapter.getItemId(position - EXTRA) : position - EXTRA; + } + + @Override + public boolean hasStableIds() { + return adapter.hasStableIds(); + } + + @Override + public boolean isEmpty() { + return adapter.isEmpty(); + } + + @Override + public void registerDataSetObserver(DataSetObserver observer) { + adapter.registerDataSetObserver(observer); + } + + @Override + public void unregisterDataSetObserver(DataSetObserver observer) { + adapter.unregisterDataSetObserver(observer); + } + + public boolean isInInitialState(){ + return isInInitialState; + } + + @Override + public boolean areAllItemsEnabled() { + return false; + } + + @Override + public boolean isEnabled(int position) { + return position != 0; // Don't allow the 'nothing selected' + // item to be picked. + } + +} diff --git a/app/src/main/res/drawable/layout_bg_gradient.xml b/app/src/main/res/drawable/layout_bg_gradient.xml new file mode 100644 index 0000000..da03918 --- /dev/null +++ b/app/src/main/res/drawable/layout_bg_gradient.xml @@ -0,0 +1,12 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index e4bad52..111df75 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -2,8 +2,9 @@ xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:bootstrap="http://schemas.android.com/apk/res-auto" + style="@style/CustomActionBarTheme" android:id="@+id/drawer_layout" - android:background="@color/bg_common_2" + android:background="@drawable/layout_bg_gradient" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> @@ -37,8 +38,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="38dp" - android:layout_centerHorizontal="true" - android:textSize="40dp" /> + android:textSize="40sp" /> + android:textColor="#aa999999"/> @@ -70,20 +69,22 @@ style="@style/wrapping_button" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginRight="20dp" + android:layout_marginEnd="20dp" bootstrap:bootstrapText="@string/btn_main_report" bootstrap:bootstrapBrand="danger" - bootstrap:roundedCorners="true" /> + bootstrap:roundedCorners="true" + android:layout_gravity="center_vertical" /> + bootstrap:roundedCorners="true" + android:layout_gravity="center_vertical" /> diff --git a/app/src/main/res/layout/activity_report.xml b/app/src/main/res/layout/activity_report.xml index 2af142b..a82d04e 100644 --- a/app/src/main/res/layout/activity_report.xml +++ b/app/src/main/res/layout/activity_report.xml @@ -35,8 +35,6 @@ android:layout_alignLeft="@+id/input_report_short" android:layout_alignStart="@+id/input_report_short"/> - - - - + diff --git a/app/src/main/res/layout/activity_report_wf.xml b/app/src/main/res/layout/activity_report_wf.xml new file mode 100644 index 0000000..2c7d252 --- /dev/null +++ b/app/src/main/res/layout/activity_report_wf.xml @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/contact_spinner_row_nothing_selected.xml b/app/src/main/res/layout/contact_spinner_row_nothing_selected.xml new file mode 100644 index 0000000..8c4eaa4 --- /dev/null +++ b/app/src/main/res/layout/contact_spinner_row_nothing_selected.xml @@ -0,0 +1,14 @@ + + + diff --git a/app/src/main/res/layout/fragment_reportwf_1.xml b/app/src/main/res/layout/fragment_reportwf_1.xml new file mode 100644 index 0000000..bdc0147 --- /dev/null +++ b/app/src/main/res/layout/fragment_reportwf_1.xml @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_reportwf_2.xml b/app/src/main/res/layout/fragment_reportwf_2.xml new file mode 100644 index 0000000..fdf23f8 --- /dev/null +++ b/app/src/main/res/layout/fragment_reportwf_2.xml @@ -0,0 +1,148 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/map_info_window.xml b/app/src/main/res/layout/map_info_window.xml index d4f64b4..5d64b23 100644 --- a/app/src/main/res/layout/map_info_window.xml +++ b/app/src/main/res/layout/map_info_window.xml @@ -1,17 +1,16 @@ + android:padding="1dp" + android:background="#CCc9c9c9"> @@ -28,6 +27,7 @@ android:id="@+id/txt_infowindow_title" android:text="Header" android:textSize="16dp" + android:paddingLeft="5dp" android:typeface="serif" /> @@ -43,7 +44,7 @@ android:layout_height="wrap_content" android:textColor="#b9000000" android:text="Category" - + android:paddingLeft="5dp" android:paddingBottom="10dp" android:id="@+id/txt_infowindow_category" android:typeface="serif" /> @@ -53,7 +54,7 @@ android:id="@+id/lay_infowindow_2" android:background="#55151515" android:layout_width="match_parent" - android:layout_marginRight="5dp" + android:padding="3dp" android:layout_height="match_parent"> - + + + diff --git a/app/src/main/res/menu/menu_login.xml b/app/src/main/res/menu/menu_login.xml deleted file mode 100644 index ed0a9ea..0000000 --- a/app/src/main/res/menu/menu_login.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - diff --git a/app/src/main/res/menu/menu_maps.xml b/app/src/main/res/menu/menu_maps.xml index f1e029a..ba3c426 100644 --- a/app/src/main/res/menu/menu_maps.xml +++ b/app/src/main/res/menu/menu_maps.xml @@ -5,16 +5,12 @@ - - - + + diff --git a/app/src/main/res/menu/menu_reportwf.xml b/app/src/main/res/menu/menu_reportwf.xml new file mode 100644 index 0000000..3749dc4 --- /dev/null +++ b/app/src/main/res/menu/menu_reportwf.xml @@ -0,0 +1,15 @@ + + + + + + + diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index b1e1d88..7c45c81 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -2,13 +2,13 @@ #26ae90 #2e3237 - #e1e1e1 + #ececec #0461A8 #ffffff #ffffff #ff0000 #ff4400 - #03518c + #03518c #222222 #999999 #888888 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index f4b94ae..7c235d2 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -117,5 +117,97 @@ Retrieve data from server Author Score + Report NEW + + Please choose... + From date (yyyy-MM-dd) + From time + To date (yyyy-MM-dd) + To time + + + Allgemeiner Vorfall/Situation + Mündliche Gewalt + Leichte bis schwere körperliche Gewalt + Lebensgefährliche Gewalt + Naturkatastrophe + Menschliche Katastrophe & Infrastruktur + + + + Diebstahl, Betrug + Drogen in Getränk/Speise, Drogenmissbrauch + Demonstration, Unruhen, Straßenblockade + Checkpoint, Kontrollen + Korruption, Erpressung, Schutzgeld + Einflussgebiet Kriminalität, Milizen, Terroristen + Sonstiges... + + + + Sexuelle Belästigung + Beleidigung, Drohung + Vernehmung/Befragung öffentlich + Aufhetzung + Sonstiges... + + + + Sexueller Übergriff + Angriff auf Person allgemein + Schlägerei + Festnahme/Gefangennahme + Zwangsarbeit + Sonstiges... + + + + Vergewaltigung + Folter, Entführung, Geiselnahme + Schießerei + Explosion, Selbstmordattentat + Mord, Tötung, Hinrichtung + Leichenzurschaustellung zur Abschreckung + Sonstiges... + + + + Temperaturextrem + Wind, Sturm, Orkan, Tornado + Überschwemmung/-flutung + Erdbeben, Berghang Einsturz + Feuer, Rauch-, Aschewolken, Vulkanausbruch + Hungersnot, Tierplage + Sonstiges... + + + + Smog Stadt + Stromausfall, Unfall + Zerstörung, Einsturzgefahr Gebäude + Brandkatastrophe + Chemiekatastrophe, Ölpest + Seuche, Krankheit + Chaos Bevölkerung + Sonstiges... + + + + Jetzt! + Regelmäßig + Bestimmter Zeitpunkt + Bestimmter Zeitraum + Weiß ich nicht + + + + Vormittags + Tagsüber + Abends + Nachts + + + + diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index e8fac03..0f948e5 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -1,9 +1,4 @@ - -