DT @1.11.2015: An incidentCategories gearbeitet. Werden beim Report nun vorher aus der mySQL Datenbank ausgelesen.
This commit is contained in:
@@ -4,7 +4,6 @@ import android.app.SearchManager;
|
|||||||
import android.app.SearchableInfo;
|
import android.app.SearchableInfo;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.SharedPreferences;
|
|
||||||
import android.database.Cursor;
|
import android.database.Cursor;
|
||||||
import android.graphics.Color;
|
import android.graphics.Color;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
@@ -50,7 +49,7 @@ public class MapsActivity extends BaseActivity implements LoaderManager.LoaderCa
|
|||||||
|
|
||||||
private static GoogleMap mMap;
|
private static GoogleMap mMap;
|
||||||
Marker mMarker;
|
Marker mMarker;
|
||||||
HashMap<String, String> markerIDs = new HashMap<String, String>();
|
HashMap<String, String> markerIDs = new HashMap<>();
|
||||||
|
|
||||||
private LatLng myLocation;
|
private LatLng myLocation;
|
||||||
private LatLng markedLocation;
|
private LatLng markedLocation;
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ package org.deke.risk.riskahead;
|
|||||||
|
|
||||||
import android.graphics.Color;
|
import android.graphics.Color;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.provider.ContactsContract;
|
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.view.Menu;
|
import android.view.Menu;
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
|
|||||||
@@ -26,10 +26,12 @@ import com.android.volley.toolbox.StringRequest;
|
|||||||
import org.deke.risk.riskahead.helper.AppConfig;
|
import org.deke.risk.riskahead.helper.AppConfig;
|
||||||
import org.deke.risk.riskahead.helper.AppController;
|
import org.deke.risk.riskahead.helper.AppController;
|
||||||
import org.deke.risk.riskahead.helper.BaseActivity;
|
import org.deke.risk.riskahead.helper.BaseActivity;
|
||||||
|
import org.json.JSONArray;
|
||||||
import org.json.JSONException;
|
import org.json.JSONException;
|
||||||
import org.json.JSONObject;
|
import org.json.JSONObject;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.Calendar;
|
import java.util.Calendar;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -63,15 +65,20 @@ public class ReportActivity extends BaseActivity {
|
|||||||
private int year, month, day;
|
private int year, month, day;
|
||||||
private int hour, minute;
|
private int hour, minute;
|
||||||
|
|
||||||
|
|
||||||
|
public HashMap<String, String[]> categories;
|
||||||
|
public ArrayList<String> incidentCategoryList;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
userHasToBeLoggedIn();
|
userHasToBeLoggedIn();
|
||||||
|
|
||||||
Spinner spinner = (Spinner) findViewById(R.id.dd_report_category);
|
|
||||||
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.incident_categories, android.R.layout.simple_spinner_item);
|
// ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, incidentCategories, android.R.layout.simple_spinner_item);
|
||||||
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
|
// adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
|
||||||
spinner.setAdapter(adapter);
|
getCategories();
|
||||||
|
|
||||||
|
|
||||||
final Calendar c = Calendar.getInstance();
|
final Calendar c = Calendar.getInstance();
|
||||||
year = c.get(Calendar.YEAR);
|
year = c.get(Calendar.YEAR);
|
||||||
@@ -90,13 +97,13 @@ public class ReportActivity extends BaseActivity {
|
|||||||
|
|
||||||
restoreSharedPreferences();
|
restoreSharedPreferences();
|
||||||
|
|
||||||
if(txtDay.getText().toString() == "") {
|
if(txtDay.getText().toString().equals("")) {
|
||||||
txtDay.setText(new StringBuilder()
|
txtDay.setText(new StringBuilder()
|
||||||
.append(year).append("-").append(month + 1).append("-")
|
.append(year).append("-").append(month + 1).append("-")
|
||||||
.append(day).append(" "));
|
.append(day).append(" "));
|
||||||
}
|
}
|
||||||
|
|
||||||
if(txtTime.getText().toString() == "") {
|
if(txtTime.getText().toString().equals("")) {
|
||||||
txtTime.setText(new StringBuilder().append(hour)
|
txtTime.setText(new StringBuilder().append(hour)
|
||||||
.append(":").append(minute).append(" "));
|
.append(":").append(minute).append(" "));
|
||||||
}
|
}
|
||||||
@@ -131,7 +138,7 @@ public class ReportActivity extends BaseActivity {
|
|||||||
@Override
|
@Override
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
String tag_string_req = "addincidentwithposition";
|
String tag_string_req = "addincidentwithposition";
|
||||||
StringRequest strReq = getStringRequestAddIncidentWithPosition(txtTitle.getText().toString(), txtDescription.getText().toString(), txtCrimeCategory.getSelectedItemPosition(), latitude, longitude, 10, 1, txtDay.getText().toString(), txtTime.getText().toString());
|
StringRequest strReq = getStringRequestAddIncidentWithPosition(txtTitle.getText().toString(), txtDescription.getText().toString(), Integer.valueOf(categories.get(txtCrimeCategory.getSelectedItem().toString())[0]), latitude, longitude, 10, 1, txtDay.getText().toString(), txtTime.getText().toString());
|
||||||
AppController.getInstance().addToRequestQueue(strReq, tag_string_req);
|
AppController.getInstance().addToRequestQueue(strReq, tag_string_req);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -191,7 +198,6 @@ public class ReportActivity extends BaseActivity {
|
|||||||
showMessage("Report added!");
|
showMessage("Report added!");
|
||||||
SharedPreferences.Editor editor = getPreferences(MODE_PRIVATE).edit();
|
SharedPreferences.Editor editor = getPreferences(MODE_PRIVATE).edit();
|
||||||
editor.clear();
|
editor.clear();
|
||||||
editor.commit();
|
|
||||||
editor.apply();
|
editor.apply();
|
||||||
gotoMapActivity();
|
gotoMapActivity();
|
||||||
} else {
|
} else {
|
||||||
@@ -310,4 +316,76 @@ public class ReportActivity extends BaseActivity {
|
|||||||
editor.apply();
|
editor.apply();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void getCategories(){
|
||||||
|
String tag_string_req = "getincidentcategories";
|
||||||
|
StringRequest strReq = getStringRequestGetIncidentCategories();
|
||||||
|
AppController.getInstance().addToRequestQueue(strReq, tag_string_req);
|
||||||
|
}
|
||||||
|
|
||||||
|
private StringRequest getStringRequestGetIncidentCategories() {
|
||||||
|
return new StringRequest(Request.Method.POST, AppConfig.URL_REGISTER, new Response.Listener<String>() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onResponse(String response) {
|
||||||
|
Log.d(TAG, "Incident categories response: " + response);
|
||||||
|
hideDialog();
|
||||||
|
|
||||||
|
try {
|
||||||
|
JSONObject jObj = new JSONObject(response);
|
||||||
|
boolean error = jObj.getBoolean("error");
|
||||||
|
|
||||||
|
// Check for error node in json
|
||||||
|
if (!error) {
|
||||||
|
JSONArray jsoncategories = jObj.getJSONArray("msg");
|
||||||
|
categories = new HashMap<>();
|
||||||
|
incidentCategoryList = new ArrayList<>();
|
||||||
|
|
||||||
|
for(int i=0;i<jsoncategories.length();i++){
|
||||||
|
JSONObject category = jsoncategories.getJSONObject(i);
|
||||||
|
|
||||||
|
String tmp[] = {category.getString("uid"),category.getString("description")};
|
||||||
|
categories.put(category.getString("name"),tmp);
|
||||||
|
|
||||||
|
incidentCategoryList.add(category.getString("name"));
|
||||||
|
}
|
||||||
|
|
||||||
|
ArrayAdapter<String> adapter = new ArrayAdapter<>(getApplicationContext(),android.R.layout.simple_spinner_dropdown_item,incidentCategoryList);
|
||||||
|
Spinner spinner = (Spinner) findViewById(R.id.dd_report_category);
|
||||||
|
spinner.setAdapter(adapter);
|
||||||
|
} else {
|
||||||
|
// Error in login. Get the error message
|
||||||
|
String errorMsg = jObj.getString("error_msg");
|
||||||
|
Toast.makeText(getApplicationContext(), errorMsg, Toast.LENGTH_LONG).show();
|
||||||
|
}
|
||||||
|
} catch (JSONException e) {
|
||||||
|
// JSON error
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}, new Response.ErrorListener() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onErrorResponse(VolleyError error) {
|
||||||
|
Log.e(TAG, "Report Error: " + error.getMessage());
|
||||||
|
Toast.makeText(getApplicationContext(),
|
||||||
|
error.getMessage(), Toast.LENGTH_LONG).show();
|
||||||
|
hideDialog();
|
||||||
|
}
|
||||||
|
}) {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Map<String, String> getParams() {
|
||||||
|
// Posting parameters to login url
|
||||||
|
Map<String, String> params = new HashMap<>();
|
||||||
|
params.put("tag", "getincidentcategories");
|
||||||
|
params.put("uid", user.get("uid"));
|
||||||
|
params.put("token", user.get("token"));
|
||||||
|
|
||||||
|
|
||||||
|
return params;
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -90,7 +90,7 @@ public class ReportlistActivity extends BaseActivity {
|
|||||||
// Check for error node in json
|
// Check for error node in json
|
||||||
if (!error) {
|
if (!error) {
|
||||||
JSONArray incidents = jObj.getJSONArray("message");
|
JSONArray incidents = jObj.getJSONArray("message");
|
||||||
resultList = new ArrayList<JSONObject>();
|
resultList = new ArrayList<>();
|
||||||
|
|
||||||
for(int i=0;i<incidents.length();i++){
|
for(int i=0;i<incidents.length();i++){
|
||||||
JSONObject incident = incidents.getJSONObject(i);
|
JSONObject incident = incidents.getJSONObject(i);
|
||||||
|
|||||||
@@ -151,7 +151,7 @@ public class SettingsActivity extends BaseActivity {
|
|||||||
@Override
|
@Override
|
||||||
protected Map<String, String> getParams() {
|
protected Map<String, String> getParams() {
|
||||||
// Posting params to register url
|
// Posting params to register url
|
||||||
Map<String, String> params = new HashMap<String, String>();
|
Map<String, String> params = new HashMap<>();
|
||||||
params.put("tag", "updateuser");
|
params.put("tag", "updateuser");
|
||||||
params.put("uid", user.get("uid"));
|
params.put("uid", user.get("uid"));
|
||||||
params.put("token", user.get("token"));
|
params.put("token", user.get("token"));
|
||||||
@@ -180,7 +180,6 @@ public class SettingsActivity extends BaseActivity {
|
|||||||
if (!error) {
|
if (!error) {
|
||||||
// do nothing actually
|
// do nothing actually
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
// Error occurred in registration. Get the error
|
// Error occurred in registration. Get the error
|
||||||
// message
|
// message
|
||||||
String errorMsg = jObj.getString("error_msg");
|
String errorMsg = jObj.getString("error_msg");
|
||||||
@@ -204,8 +203,7 @@ public class SettingsActivity extends BaseActivity {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Map<String, String> getParams() {
|
protected Map<String, String> getParams() {
|
||||||
// Posting params to register url
|
Map<String, String> params = new HashMap<>();
|
||||||
Map<String, String> params = new HashMap<String, String>();
|
|
||||||
params.put("tag", "requestpwreset");
|
params.put("tag", "requestpwreset");
|
||||||
params.put("email", email);
|
params.put("email", email);
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ import android.location.Geocoder;
|
|||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.widget.ArrayAdapter;
|
|
||||||
import android.widget.EditText;
|
import android.widget.EditText;
|
||||||
import android.widget.Spinner;
|
import android.widget.Spinner;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
@@ -55,17 +54,7 @@ public class ViewReportActivity extends BaseActivity {
|
|||||||
txtPosition = (EditText) findViewById(R.id.input_viewreport_position);
|
txtPosition = (EditText) findViewById(R.id.input_viewreport_position);
|
||||||
txtPositionDetail = (TextView) findViewById(R.id.lbl_viewreport_position_detail);
|
txtPositionDetail = (TextView) findViewById(R.id.lbl_viewreport_position_detail);
|
||||||
|
|
||||||
Spinner spinner = (Spinner) findViewById(R.id.dd_viewreport_category);
|
getIncident();
|
||||||
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.incident_categories, android.R.layout.simple_spinner_item);
|
|
||||||
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
|
|
||||||
spinner.setAdapter(adapter);
|
|
||||||
|
|
||||||
Intent intent = getIntent();
|
|
||||||
String uid = intent.getStringExtra(BaseActivity.EXTRA_MESSAGE);
|
|
||||||
|
|
||||||
String tag_string_req = "getincidentwithpositionfromid";
|
|
||||||
StringRequest strReq = getStringRequestGetIncidentWithPositionFromID(uid);
|
|
||||||
AppController.getInstance().addToRequestQueue(strReq, tag_string_req);
|
|
||||||
|
|
||||||
findViewById(R.id.btn_viewreport_upvote).setOnClickListener(new View.OnClickListener() {
|
findViewById(R.id.btn_viewreport_upvote).setOnClickListener(new View.OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
@@ -160,4 +149,13 @@ public class ViewReportActivity extends BaseActivity {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void getIncident() {
|
||||||
|
Intent intent = getIntent();
|
||||||
|
String uid = intent.getStringExtra(BaseActivity.EXTRA_MESSAGE);
|
||||||
|
|
||||||
|
String tag_string_req = "getincidentwithpositionfromid";
|
||||||
|
StringRequest strReq = getStringRequestGetIncidentWithPositionFromID(uid);
|
||||||
|
AppController.getInstance().addToRequestQueue(strReq, tag_string_req);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,6 +20,10 @@ import android.widget.ArrayAdapter;
|
|||||||
import android.widget.ListView;
|
import android.widget.ListView;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
|
import com.android.volley.Request;
|
||||||
|
import com.android.volley.Response;
|
||||||
|
import com.android.volley.VolleyError;
|
||||||
|
import com.android.volley.toolbox.StringRequest;
|
||||||
import com.beardedhen.androidbootstrap.TypefaceProvider;
|
import com.beardedhen.androidbootstrap.TypefaceProvider;
|
||||||
import com.google.android.gms.maps.model.LatLng;
|
import com.google.android.gms.maps.model.LatLng;
|
||||||
|
|
||||||
@@ -33,8 +37,14 @@ import org.deke.risk.riskahead.ReportlistActivity;
|
|||||||
import org.deke.risk.riskahead.SettingsActivity;
|
import org.deke.risk.riskahead.SettingsActivity;
|
||||||
import org.deke.risk.riskahead.SubscriptionsActivity;
|
import org.deke.risk.riskahead.SubscriptionsActivity;
|
||||||
import org.deke.risk.riskahead.ViewReportActivity;
|
import org.deke.risk.riskahead.ViewReportActivity;
|
||||||
|
import org.json.JSONArray;
|
||||||
|
import org.json.JSONException;
|
||||||
|
import org.json.JSONObject;
|
||||||
|
|
||||||
|
import java.lang.reflect.Array;
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
public abstract class BaseActivity extends AppCompatActivity {
|
public abstract class BaseActivity extends AppCompatActivity {
|
||||||
|
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ public class PlaceJSONParser {
|
|||||||
|
|
||||||
private List<HashMap<String, String>> getPlaces(JSONArray jPlaces){
|
private List<HashMap<String, String>> getPlaces(JSONArray jPlaces){
|
||||||
int placesCount = jPlaces.length();
|
int placesCount = jPlaces.length();
|
||||||
List<HashMap<String, String>> placesList = new ArrayList<HashMap<String,String>>();
|
List<HashMap<String, String>> placesList = new ArrayList<>();
|
||||||
HashMap<String, String> place = null;
|
HashMap<String, String> place = null;
|
||||||
|
|
||||||
/** Taking each place, parses and adds to list object */
|
/** Taking each place, parses and adds to list object */
|
||||||
@@ -49,7 +49,7 @@ public class PlaceJSONParser {
|
|||||||
/** Parsing the Place JSON object */
|
/** Parsing the Place JSON object */
|
||||||
private HashMap<String, String> getPlace(JSONObject jPlace){
|
private HashMap<String, String> getPlace(JSONObject jPlace){
|
||||||
|
|
||||||
HashMap<String, String> place = new HashMap<String, String>();
|
HashMap<String, String> place = new HashMap<>();
|
||||||
|
|
||||||
String id="";
|
String id="";
|
||||||
String reference="";
|
String reference="";
|
||||||
|
|||||||
@@ -16,8 +16,8 @@ public class PlaceJSONParserDetail {
|
|||||||
Double lng = Double.valueOf(0);
|
Double lng = Double.valueOf(0);
|
||||||
String formattedAddress = "";
|
String formattedAddress = "";
|
||||||
|
|
||||||
HashMap<String, String> hm = new HashMap<String, String>();
|
HashMap<String, String> hm = new HashMap<>();
|
||||||
List<HashMap<String, String>> list = new ArrayList<HashMap<String,String>>();
|
List<HashMap<String, String>> list = new ArrayList<>();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
lat = (Double)jObject.getJSONObject("result").getJSONObject("geometry").getJSONObject("location").get("lat");
|
lat = (Double)jObject.getJSONObject("result").getJSONObject("geometry").getJSONObject("location").get("lat");
|
||||||
|
|||||||
@@ -112,7 +112,6 @@ public class PlaceProvider extends ContentProvider {
|
|||||||
|
|
||||||
}
|
}
|
||||||
} catch (JSONException e) {
|
} catch (JSONException e) {
|
||||||
// TODO Auto-generated catch block
|
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
c = mCursor;
|
c = mCursor;
|
||||||
@@ -141,7 +140,6 @@ public class PlaceProvider extends ContentProvider {
|
|||||||
mCursor.addRow(new String[] { Integer.toString(i), hMap.get("description"), hMap.get("reference") });
|
mCursor.addRow(new String[] { Integer.toString(i), hMap.get("description"), hMap.get("reference") });
|
||||||
}
|
}
|
||||||
} catch (JSONException e) {
|
} catch (JSONException e) {
|
||||||
// TODO Auto-generated catch block
|
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
c = mCursor;
|
c = mCursor;
|
||||||
@@ -156,7 +154,6 @@ public class PlaceProvider extends ContentProvider {
|
|||||||
try {
|
try {
|
||||||
detailsList = detailsParser.parse(new JSONObject(jsonPlaceDetails));
|
detailsList = detailsParser.parse(new JSONObject(jsonPlaceDetails));
|
||||||
} catch (JSONException e) {
|
} catch (JSONException e) {
|
||||||
// TODO Auto-generated catch block
|
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -172,32 +169,26 @@ public class PlaceProvider extends ContentProvider {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int delete(Uri uri, String selection, String[] selectionArgs) {
|
public int delete(Uri uri, String selection, String[] selectionArgs) {
|
||||||
// TODO Auto-generated method stub
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getType(Uri uri) {
|
public String getType(Uri uri) {
|
||||||
// TODO Auto-generated method stub
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Uri insert(Uri uri, ContentValues values) {
|
public Uri insert(Uri uri, ContentValues values) {
|
||||||
// TODO Auto-generated method stub
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onCreate() {
|
public boolean onCreate() {
|
||||||
// TODO Auto-generated method stub
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int update(Uri uri, ContentValues values, String selection,
|
public int update(Uri uri, ContentValues values, String selection,String[] selectionArgs) {
|
||||||
String[] selectionArgs) {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -75,7 +75,7 @@ public class SessionManager {
|
|||||||
* Getting user data from database
|
* Getting user data from database
|
||||||
* */
|
* */
|
||||||
public HashMap<String, String> getUserDetails() {
|
public HashMap<String, String> getUserDetails() {
|
||||||
HashMap<String, String> user = new HashMap<String, String>();
|
HashMap<String, String> user = new HashMap<>();
|
||||||
|
|
||||||
user.put(KEY_UID, userdata.getString(KEY_UID, null));
|
user.put(KEY_UID, userdata.getString(KEY_UID, null));
|
||||||
user.put(KEY_USERNAME, userdata.getString(KEY_USERNAME, null));
|
user.put(KEY_USERNAME, userdata.getString(KEY_USERNAME, null));
|
||||||
|
|||||||
Reference in New Issue
Block a user