@Override
  public Uri insert(Uri uri, ContentValues values) {
    final SQLiteDatabase db = mOpenHelper.getWritableDatabase();
    final int match = sUriMatcher.match(uri);
    Uri returnUri;

    switch (match) {
      case MOVIES:
        {
          long _id = db.insert(MoviesContract.MoviesEntry.TABLE_NAME, null, values);
          if (_id > 0) returnUri = MoviesContract.MoviesEntry.buildMovieUri(_id);
          else throw new android.database.SQLException("Failed to insert row into " + uri);
          break;
        }
      case TRAILERS:
        {
          long _id = db.insert(MoviesContract.TrailersEntry.TABLE_NAME, null, values);
          if (_id > 0) returnUri = MoviesContract.TrailersEntry.buildTrailerUri(_id);
          else throw new android.database.SQLException("Failed to insert row into " + uri);
          break;
        }
      case REVIEWS:
        {
          long _id = db.insert(MoviesContract.ReviewsEntry.TABLE_NAME, null, values);
          if (_id > 0) returnUri = MoviesContract.ReviewsEntry.buildReviewUri(_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(
      Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
    Cursor retCursor;
    switch (sUriMatcher.match(uri)) {
        // "weather/*/*"
      case MOVIES:
        {
          retCursor =
              mOpenHelper
                  .getReadableDatabase()
                  .query(
                      MoviesContract.MoviesEntry.TABLE_NAME,
                      projection,
                      selection,
                      selectionArgs,
                      null,
                      null,
                      sortOrder);
          break;
        }
        // "weather/*"
      case MOVIE_WITH_ID:
        {
          selectionArgs =
              new String[] {Long.toString(MoviesContract.MoviesEntry.getMovieIDFromUri(uri))};
          retCursor =
              mOpenHelper
                  .getReadableDatabase()
                  .query(
                      MoviesContract.MoviesEntry.TABLE_NAME,
                      projection,
                      sItemMovieIDSelection,
                      selectionArgs,
                      null,
                      null,
                      sortOrder);
          break;
        }
        // "weather"
      case TRAILERS:
        {
          retCursor =
              mOpenHelper
                  .getReadableDatabase()
                  .query(
                      MoviesContract.TrailersEntry.TABLE_NAME,
                      projection,
                      selection,
                      selectionArgs,
                      null,
                      null,
                      sortOrder);
          break;
        }
        // "location"
      case TRAILER_WITH_MOVIE:
        {
          selectionArgs =
              new String[] {Long.toString(MoviesContract.TrailersEntry.getMovieIDFromUri(uri))};
          retCursor =
              sTrailerByMovieID.query(
                  mOpenHelper.getReadableDatabase(),
                  projection,
                  sMovieIDSelection,
                  selectionArgs,
                  null,
                  null,
                  sortOrder);
          break;
        }
        // "weather"
      case REVIEWS:
        {
          retCursor =
              mOpenHelper
                  .getReadableDatabase()
                  .query(
                      MoviesContract.ReviewsEntry.TABLE_NAME,
                      projection,
                      selection,
                      selectionArgs,
                      null,
                      null,
                      sortOrder);
          break;
        }
        // "location"
      case REVIEW_WITH_MOVIE:
        {
          selectionArgs =
              new String[] {Long.toString(MoviesContract.ReviewsEntry.getMovieIDFromUri(uri))};
          retCursor =
              sReviewByMovieID.query(
                  mOpenHelper.getReadableDatabase(),
                  projection,
                  sMovieIDSelection,
                  selectionArgs,
                  null,
                  null,
                  sortOrder);
          break;
        }

      default:
        throw new UnsupportedOperationException("Unknown uri: " + uri);
    }
    retCursor.setNotificationUri(getContext().getContentResolver(), uri);
    return retCursor;
  }