-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
28 changed files
with
744 additions
and
114 deletions.
There are no files selected for viewing
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
213 changes: 213 additions & 0 deletions
213
app/src/main/java/com/calgen/prodek/sunshine_v2/Fragment/DetailFragment.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,213 @@ | ||
package com.calgen.prodek.sunshine_v2.fragment; | ||
|
||
import android.content.Intent; | ||
import android.database.Cursor; | ||
import android.net.Uri; | ||
import android.os.Bundle; | ||
import android.support.v4.app.Fragment; | ||
import android.support.v4.app.LoaderManager; | ||
import android.support.v4.content.CursorLoader; | ||
import android.support.v4.content.Loader; | ||
import android.support.v4.view.MenuItemCompat; | ||
import android.support.v7.widget.ShareActionProvider; | ||
import android.view.LayoutInflater; | ||
import android.view.Menu; | ||
import android.view.MenuInflater; | ||
import android.view.MenuItem; | ||
import android.view.View; | ||
import android.view.ViewGroup; | ||
import android.widget.ImageView; | ||
import android.widget.TextView; | ||
|
||
import com.calgen.prodek.sunshine_v2.R; | ||
import com.calgen.prodek.sunshine_v2.Utility; | ||
import com.calgen.prodek.sunshine_v2.data.WeatherContract; | ||
import com.calgen.prodek.sunshine_v2.data.WeatherContract.WeatherEntry; | ||
|
||
/** | ||
* A placeholder fragment containing a simple view. | ||
*/ | ||
public class DetailFragment extends Fragment implements LoaderManager.LoaderCallbacks<Cursor> { | ||
|
||
|
||
// These indices are tied to DETAIL_COLUMNS. If DETAIL_COLUMNS changes, these | ||
// must change. | ||
public static final int COL_WEATHER_ID = 0; | ||
public static final int COL_WEATHER_DATE = 1; | ||
public static final int COL_WEATHER_DESC = 2; | ||
public static final int COL_WEATHER_MAX_TEMP = 3; | ||
public static final int COL_WEATHER_MIN_TEMP = 4; | ||
public static final int COL_WEATHER_HUMIDITY = 5; | ||
public static final int COL_WEATHER_PRESSURE = 6; | ||
public static final int COL_WEATHER_WIND_SPEED = 7; | ||
public static final int COL_WEATHER_DEGREES = 8; | ||
public static final int COL_WEATHER_CONDITION_ID = 9; | ||
public static final String DETAIL_URI = "URI"; | ||
private static final String LOG_TAG = DetailFragment.class.getSimpleName(); | ||
private static final String FORECAST_SHARE_HASHTAG = " #SunshineApp"; | ||
private static final int DETAIL_LOADER = 0; | ||
private static final String[] DETAIL_COLUMNS = { | ||
WeatherEntry.TABLE_NAME + "." + WeatherEntry._ID, | ||
WeatherEntry.COLUMN_DATE, | ||
WeatherEntry.COLUMN_SHORT_DESC, | ||
WeatherEntry.COLUMN_MAX_TEMP, | ||
WeatherEntry.COLUMN_MIN_TEMP, | ||
WeatherEntry.COLUMN_HUMIDITY, | ||
WeatherEntry.COLUMN_PRESSURE, | ||
WeatherEntry.COLUMN_WIND_SPEED, | ||
WeatherEntry.COLUMN_DEGREES, | ||
WeatherEntry.COLUMN_WEATHER_ID, | ||
WeatherContract.LocationEntry.COLUMN_LOCATION_SETTING | ||
}; | ||
private Uri mUri; | ||
private ShareActionProvider mShareActionProvider; | ||
private String mForecast; | ||
private ImageView mIconView; | ||
private TextView mFriendlyDateView; | ||
private TextView mDateView; | ||
private TextView mDescriptionView; | ||
private TextView mHighTempView; | ||
private TextView mLowTempView; | ||
private TextView mHumidityView; | ||
private TextView mWindView; | ||
private TextView mPressureView; | ||
|
||
public DetailFragment() { | ||
setHasOptionsMenu(true); | ||
} | ||
|
||
@Override | ||
public View onCreateView(LayoutInflater inflater, ViewGroup container, | ||
Bundle savedInstanceState) { | ||
Bundle arguments = getArguments(); | ||
if (arguments != null) { | ||
mUri = arguments.getParcelable(DetailFragment.DETAIL_URI); | ||
} | ||
View rootView = inflater.inflate(R.layout.fragment_detail, container, false); | ||
mIconView = (ImageView) rootView.findViewById(R.id.detail_icon); | ||
mDateView = (TextView) rootView.findViewById(R.id.detail_date_textview); | ||
mFriendlyDateView = (TextView) rootView.findViewById(R.id.detail_day_textview); | ||
mDescriptionView = (TextView) rootView.findViewById(R.id.detail_forecast_textview); | ||
mHighTempView = (TextView) rootView.findViewById(R.id.detail_high_textview); | ||
mLowTempView = (TextView) rootView.findViewById(R.id.detail_low_textview); | ||
mHumidityView = (TextView) rootView.findViewById(R.id.detail_humidity_textview); | ||
mWindView = (TextView) rootView.findViewById(R.id.detail_wind_textview); | ||
mPressureView = (TextView) rootView.findViewById(R.id.detail_pressure_textview); | ||
return rootView; | ||
} | ||
|
||
@Override | ||
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { | ||
// Inflate the menu; this adds items to the action bar if it is present. | ||
inflater.inflate(R.menu.menu_detail, menu); | ||
|
||
// Retrieve the share menu item | ||
MenuItem menuItem = menu.findItem(R.id.action_share); | ||
|
||
// Get the provider and hold onto it to set/change the share intent. | ||
mShareActionProvider = (ShareActionProvider) MenuItemCompat.getActionProvider(menuItem); | ||
|
||
// If onLoadFinished happens before this, we can go ahead and set the share intent now. | ||
if (mForecast != null) { | ||
mShareActionProvider.setShareIntent(createShareForecastIntent()); | ||
} | ||
} | ||
|
||
private Intent createShareForecastIntent() { | ||
Intent shareIntent = new Intent(Intent.ACTION_SEND); | ||
shareIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET); | ||
shareIntent.setType("text/plain"); | ||
shareIntent.putExtra(Intent.EXTRA_TEXT, mForecast + FORECAST_SHARE_HASHTAG); | ||
return shareIntent; | ||
} | ||
|
||
@Override | ||
public void onActivityCreated(Bundle savedInstanceState) { | ||
getLoaderManager().initLoader(DETAIL_LOADER, null, this); | ||
super.onActivityCreated(savedInstanceState); | ||
} | ||
|
||
@Override | ||
public Loader<Cursor> onCreateLoader(int id, Bundle args) { | ||
if (mUri != null) { | ||
return new CursorLoader( | ||
getActivity(), | ||
mUri, | ||
DETAIL_COLUMNS, | ||
null, | ||
null, | ||
null | ||
); | ||
} | ||
return null; | ||
} | ||
|
||
public void onLocationChanged( String newLocation ) { | ||
// replace the uri, since the location has changed | ||
Uri uri = mUri; | ||
if (null != uri) { | ||
long date = WeatherContract.WeatherEntry.getDateFromUri(uri); | ||
mUri = WeatherContract.WeatherEntry.buildWeatherLocationWithDate(newLocation, date); | ||
getLoaderManager().restartLoader(DETAIL_LOADER, null, this); | ||
} | ||
} | ||
|
||
@Override | ||
public void onLoadFinished(Loader<Cursor> loader, Cursor data) { | ||
if (data != null && data.moveToFirst()) { | ||
// Read weather condition ID from cursor | ||
int weatherId = data.getInt(COL_WEATHER_CONDITION_ID); | ||
int weatherIconId = Utility.getArtResourceForWeatherCondition(weatherId); | ||
mIconView.setImageResource(weatherIconId); | ||
|
||
// Read date from cursor and update views for day of week and date | ||
long date = data.getLong(COL_WEATHER_DATE); | ||
String friendlyDateText = Utility.getDayName(getActivity(), date); | ||
String dateText = Utility.getFormattedMonthDay(getActivity(), date); | ||
mFriendlyDateView.setText(friendlyDateText); | ||
mDateView.setText(dateText); | ||
|
||
// Read description from cursor and update view | ||
String description = data.getString(COL_WEATHER_DESC); | ||
mDescriptionView.setText(description); | ||
|
||
// Read high temperature from cursor and update view | ||
boolean isMetric = Utility.isMetric(getActivity()); | ||
|
||
double high = data.getDouble(COL_WEATHER_MAX_TEMP); | ||
String highString = Utility.formatTemperature(getActivity(), high, isMetric); | ||
mHighTempView.setText(highString); | ||
|
||
// Read low temperature from cursor and update view | ||
double low = data.getDouble(COL_WEATHER_MIN_TEMP); | ||
String lowString = Utility.formatTemperature(getActivity(), low, isMetric); | ||
mLowTempView.setText(lowString); | ||
|
||
// Read humidity from cursor and update view | ||
float humidity = data.getFloat(COL_WEATHER_HUMIDITY); | ||
mHumidityView.setText(getActivity().getString(R.string.format_humidity, humidity)); | ||
|
||
// Read wind speed and direction from cursor and update view | ||
float windSpeedStr = data.getFloat(COL_WEATHER_WIND_SPEED); | ||
float windDirStr = data.getFloat(COL_WEATHER_DEGREES); | ||
mWindView.setText(Utility.getFormattedWind(getActivity(), windSpeedStr, windDirStr)); | ||
|
||
// Read pressure from cursor and update view | ||
float pressure = data.getFloat(COL_WEATHER_PRESSURE); | ||
mPressureView.setText(getActivity().getString(R.string.format_pressure, pressure)); | ||
|
||
// We still need this for the share intent | ||
mForecast = String.format("%s - %s - %s/%s", dateText, description, high, low); | ||
|
||
// If onCreateOptionsMenu has already happened, we need to update the share intent now. | ||
if (mShareActionProvider != null) { | ||
mShareActionProvider.setShareIntent(createShareForecastIntent()); | ||
} | ||
} | ||
} | ||
|
||
@Override | ||
public void onLoaderReset(Loader<Cursor> loader) { | ||
} | ||
} | ||
|
Oops, something went wrong.