public class MyBase {
public static final String AUTHORITY = "com.example.imetlin.sonik";
public static final Uri BASE_CONTENT_URI = Uri.parse("content://" + AUTHORITY);
public static final String PATH_PLACES = "places";
public static final class PlaceEntry implements BaseColumns{
public static final Uri CONTENT_URI = BASE_CONTENT_URI.buildUpon().appendPath(PATH_PLACES).build();
public static final String TABLE_NAME = "places";
public static final String COLUMN_PLACE_ID = "placeID";
}
}
public class PlaceContentProvider extends ContentProvider {
public static final int PLACES = 100;
public static final int PLACE_WITH_ID = 101;
private static final UriMatcher mUriMatcher = buildUriMatcher();
private static final String TAG = PlaceContentProvider.class.getName();
public static UriMatcher buildUriMatcher() {
UriMatcher uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
uriMatcher.addURI(MyBase.AUTHORITY, MyBase.PATH_PLACES, PLACES);
uriMatcher.addURI(MyBase.AUTHORITY, MyBase.PATH_PLACES + "/#", PLACE_WITH_ID);
return uriMatcher;
}
private PlaceDbHelper mPlaceDbHelper;
@Override
public boolean onCreate() {
Context context = getContext();
mPlaceDbHelper = new PlaceDbHelper(context);
return true;
}
@Override
public Uri insert( Uri uri, ContentValues values) {
final SQLiteDatabase db = mPlaceDbHelper.getWritableDatabase();
int match = mUriMatcher.match(uri);
Uri returnUri;
switch (match) {
case PLACES:
long id = db.insert(MyBase.PlaceEntry.TABLE_NAME, null, values);
if (id > 0) {
returnUri = ContentUris.withAppendedId(MyBase.PlaceEntry.CONTENT_URI, id);
} else {
throw new android.database.SQLException("Failed to insert row into" + uri);
}
break;
default:
throw new UnsupportedOperationException("Unknown uri:" + uri);
}
getContext().getContentResolver().notifyChange(uri, null);
return returnUri;
}
@Override
public Cursor query(@NonNull Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {
final SQLiteDatabase db = mPlaceDbHelper.getReadableDatabase();
int match = mUriMatcher.match(uri);
Cursor retCursor;
switch (match) {
case PLACES:
retCursor = db.query(MyBase.PlaceEntry.TABLE_NAME,
projection,
selection,
selectionArgs,
null,
null,
sortOrder);
break;
default:
throw new UnsupportedOperationException("Unknown uri:" + uri);
}
retCursor.setNotificationUri(getContext().getContentResolver(), uri);
return retCursor;
}
@Override
public int delete(@NonNull Uri uri, String selection, String[] selectionArgs) {
final SQLiteDatabase db = mPlaceDbHelper.getWritableDatabase();
int match = mUriMatcher.match(uri);
int placesDeleted;
switch (match) {
case PLACE_WITH_ID:
String id = uri.getPathSegments().get(1);
placesDeleted = db.delete(MyBase.PlaceEntry.TABLE_NAME, "_id = ?", new String[]{id});
break;
default:
throw new UnsupportedOperationException("Unknown uri:" + uri);
}
if (placesDeleted != 0) {
getContext().getContentResolver().notifyChange(uri, null);
}
return placesDeleted;
}
@Override
public int update(@NonNull Uri uri, ContentValues contentValues, String selection, String[] selectionArgs) {
final SQLiteDatabase db = mPlaceDbHelper.getWritableDatabase();
int match = mUriMatcher.match(uri);
int placesUpdate;
switch (match) {
case PLACE_WITH_ID:
String id = uri.getPathSegments().get(1);
placesUpdate = db.update(MyBase.PlaceEntry.TABLE_NAME, contentValues, "_id = ?", new String[]{id});
break;
default:
throw new UnsupportedOperationException("Unknown uri:" + uri);
}
if (placesUpdate != 0) {
getContext().getContentResolver().notifyChange(uri, null);
}
return placesUpdate;
}
@Override
public String getType(@NonNull Uri uri){
throw new UnsupportedOperationException("Not yet implemented");
}
}
public class MainActivity extends AppCompatActivity implements
ConnectionCallbacks,
OnConnectionFailedListener {
public static final String TAG = MainActivity.class.getSimpleName();
private static final int PERMISSIONS_REQUEST_FINE_LOCATION = 111;
private static final int PLACE_PICKER_REQUEST = 1;
// Member variables
private PlaceListAdapter mAdapter;
private RecyclerView mRecyclerView;
private boolean mIsEnabled;
private GoogleApiClient mClient;
private int mCycle = 0;
private ProgressBar progressBar;
private ProgressDialog Indicator;
private final int totalProgressTime = 20;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
mRecyclerView = (RecyclerView) findViewById(R.id.list_item);
mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
mAdapter = new PlaceListAdapter(this, null);
mRecyclerView.setAdapter(mAdapter);
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab_add);
assert fab != null;
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
onPlaceButtonCliKed(view);
LoadingWindow();
}
});
mClient = new GoogleApiClient.Builder(this)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.addApi(LocationServices.API)
.addApi(Places.GEO_DATA_API)
.enableAutoManage(this, this)
.build();
}
public void onPlaceButtonCliKed(View view) {
if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION)
!= PackageManager.PERMISSION_GRANTED) {
Toast.makeText(this, getString(R.string.need_location_permission_message), Toast.LENGTH_LONG).show();
return;
}
try {
PlacePicker.IntentBuilder builder = new PlacePicker.IntentBuilder();
Intent i = builder.build(this);
startActivityForResult(i, PLACE_PICKER_REQUEST);
} catch (GooglePlayServicesRepairableException e) {
Log.e(TAG, String.format("GooglePlayServices Not Available [%s]", e.getMessage()));
} catch (GooglePlayServicesNotAvailableException e) {
Log.e(TAG, String.format("GooglePlayServices Not Available [%s]", e.getMessage()));
} catch (Exception e) {
Log.e(TAG, String.format("PlacePicker Exception: %s", e.getMessage()));
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public void onConnected(@Nullable Bundle bundle) {
refreshPlacesData();
Log.i(TAG, "API Client Connection Successful!");
}
@Override
public void onConnectionSuspended(int i) {
Log.i(TAG, "API Client Connection Suspended!");
}
@Override
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
Log.e(TAG, "API Client Connection Failed!");
}
public void refreshPlacesData() {
Uri uri = MyBase.PlaceEntry.CONTENT_URI;
Cursor data = getContentResolver().query(
uri,
null,
null,
null,
null);
if (data == null || data.getCount() == 0) return;
List<String> guids = new ArrayList<String>();
while (data.moveToNext()) {
guids.add(data.getString(data.getColumnIndex(MyBase.PlaceEntry.COLUMN_PLACE_ID)));
}
PendingResult<PlaceBuffer> placeResult = Places.GeoDataApi.getPlaceById(mClient,
guids.toArray(new String[guids.size()]));
placeResult.setResultCallback(new ResultCallback<PlaceBuffer>() {
@Override
public void onResult(@NonNull PlaceBuffer places) {
mAdapter.SwapPlaces(places);
}
});
}
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == PLACE_PICKER_REQUEST && resultCode == RESULT_OK) {
Place place = PlacePicker.getPlace(this, data);
if (place == null) {
Log.i(TAG, "No place selected");
return;
}
String placeID = place.getId();
// String adress = String.format("Place: %s", place.getAddress());
// Insert a new place into DB
ContentValues contentValues = new ContentValues();
contentValues.put(MyBase.PlaceEntry.COLUMN_PLACE_ID, placeID);
// Place place = PlacePicker.getPlace(data, this);
String toastMsg = String.format("Place: %s", place.getName());
Toast.makeText(this, toastMsg, Toast.LENGTH_LONG).show();
getContentResolver().insert(MyBase.PlaceEntry.CONTENT_URI, contentValues);
// Get live data information
refreshPlacesData();
}
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Помогите упростить функцию drawRect(int w, int h);Понимаю, костыли за костылями, но на ошибках учатся
Вопрос по сути глупый, поэтому не сильно хочется тратить время еще и на объяснение ситуации, где мне это понадобилосьПросто интересно, насколько...