Android Open Source - android-appwidget-cirrus Widget Config Activity






From Project

Back to project page android-appwidget-cirrus.

License

The source code is released under:

MIT License

If you think the Android project android-appwidget-cirrus listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

/* Copyright 2014 Wayne D Grant (www.waynedgrant.com)
   Licensed under the MIT License */
/*from  w  ww  . ja v a 2  s.  c o m*/
package com.waynedgrant.cirrus;

import java.text.MessageFormat;

import android.app.Activity;
import android.app.AlertDialog;
import android.appwidget.AppWidgetManager;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.res.Resources;
import android.os.Bundle;
import android.text.Html;
import android.text.method.LinkMovementMethod;
import android.view.Gravity;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.TextView;

import com.waynedgrant.cirrus.clientraw.ClientRawCache;
import com.waynedgrant.cirrus.measures.WeatherItem;
import com.waynedgrant.cirrus.preferences.Preferences;
import com.waynedgrant.cirrus.presentation.formatters.DateFormat;
import com.waynedgrant.cirrus.presentation.formatters.TimeFormat;
import com.waynedgrant.cirrus.units.PressureUnit;
import com.waynedgrant.cirrus.units.RainfallUnit;
import com.waynedgrant.cirrus.units.TemperatureUnit;
import com.waynedgrant.cirrus.units.WindDirectionUnit;
import com.waynedgrant.cirrus.units.WindSpeedUnit;
import com.waynedgrant.cirrus.update.Timeout;

public class WidgetConfigActivity extends Activity
{
    private int appWidgetId;
    private Intent resultValue;
        
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        
        setContentView(R.layout.widget_config_layout);
        
        Intent intent = getIntent();
        appWidgetId = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID);
        
        resultValue = new Intent();
        resultValue.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
        
        setResult(RESULT_CANCELED, resultValue);

        if (appWidgetId == AppWidgetManager.INVALID_APPWIDGET_ID)
        {
            finish();
        }
        
        populateActivity();
    }
    
    private void populateActivity()
    {
        Preferences preferences = new Preferences(getApplicationContext());
        
        String clientRawUrl = preferences.getClientRawUrl(appWidgetId);

        EditText editTextUrl = (EditText)findViewById(R.id.clientRawUrlEditText);
        editTextUrl.setText(clientRawUrl);
        
        String stationName = preferences.getStationName(appWidgetId);
        
        if (stationName != null)
        {
            CheckBox overrideStationNameCheckBox = (CheckBox)findViewById(R.id.overrideStationNameCheckBox);
            overrideStationNameCheckBox.setChecked(true);
            
            EditText stationNameEditText = (EditText)findViewById(R.id.stationNameEditText);
            stationNameEditText.setText(stationName);
            stationNameEditText.setVisibility(View.VISIBLE);
        }
        
        WeatherItem[] weatherItems = WeatherItem.values();
        
        populateSpinner(R.id.weatherItem1Spinner, weatherItems, preferences.getWeatherItem1(appWidgetId));
        populateSpinner(R.id.weatherItem2Spinner, weatherItems, preferences.getWeatherItem2(appWidgetId));
        populateSpinner(R.id.weatherItem3Spinner, weatherItems, preferences.getWeatherItem3(appWidgetId));
        populateSpinner(R.id.weatherItem4Spinner, weatherItems, preferences.getWeatherItem4(appWidgetId));
        populateSpinner(R.id.weatherItem5Spinner, weatherItems, preferences.getWeatherItem5(appWidgetId));
        
        populateSpinner(R.id.temperatureUnitSpinner, TemperatureUnit.values(), preferences.getTemperatureUnit(appWidgetId));
        populateSpinner(R.id.pressureUnitSpinner, PressureUnit.values(), preferences.getPressureUnit(appWidgetId));
        populateSpinner(R.id.windSpeedUnitSpinner, WindSpeedUnit.values(), preferences.getWindSpeedUnit(appWidgetId));
        populateSpinner(R.id.windDirectionUnitSpinner, WindDirectionUnit.values(), preferences.getWindDirectionUnit(appWidgetId));
        populateSpinner(R.id.rainfallUnitSpinner, RainfallUnit.values(), preferences.getRainfallUnit(appWidgetId));
        
        populateSpinner(R.id.dateFormatSpinner, DateFormat.values(), preferences.getDateFormat(appWidgetId));
        
        if (preferences.getDateFormat(appWidgetId) != null)
        {
            CheckBox displayDateCheckBox = (CheckBox)findViewById(R.id.displayDateCheckBox);
            displayDateCheckBox.setChecked(true);
            
            TextView dateFormatTextView = (TextView)findViewById(R.id.dateFormatTextView);
            dateFormatTextView.setVisibility(View.VISIBLE);
            
            Spinner dateFormatSpinner = (Spinner)findViewById(R.id.dateFormatSpinner);
            dateFormatSpinner.setVisibility(View.VISIBLE);
        }
        
        populateSpinner(R.id.timeFormatSpinner, TimeFormat.values(), preferences.getTimeFormat(appWidgetId));
        
        populateSpinner(R.id.connectionTimeoutSpinner, Timeout.values(), preferences.getConnectionTimeout(appWidgetId));
        populateSpinner(R.id.readTimeoutSpinner, Timeout.values(), preferences.getReadTimeout(appWidgetId));
        
        boolean transparent = preferences.isTransparent(appWidgetId);
        
        CheckBox transparentCheckBox = (CheckBox)findViewById(R.id.transparentCheckBox);
        transparentCheckBox.setChecked(transparent);
    }
    
    private <T extends Object> void populateSpinner(int spinnerId, T[] items, T selectedItem)
    {
        ArrayAdapter<T> arrayAdapter = new ArrayAdapter<T>(this, android.R.layout.simple_spinner_item, items);
        
        Spinner spinner = (Spinner)findViewById(spinnerId);
        arrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinner.setAdapter(arrayAdapter);
        spinner.setSelection(arrayAdapter.getPosition(selectedItem));
    }
    
    public void onClickOverrideStationName(View view)
    {
        CheckBox overrideStationNameCheckBox = (CheckBox)view;
        EditText stationNameEditText = (EditText)findViewById(R.id.stationNameEditText);
        
        if (overrideStationNameCheckBox.isChecked())
        {
            stationNameEditText.setVisibility(View.VISIBLE);
        }
        else
        {
            stationNameEditText.setVisibility(View.GONE);
        }
    }
    
    public void onClickDisplayDate(View view)
    {
        CheckBox displayDateCheckBox = (CheckBox)view;
        TextView dateFormatTextView = (TextView)findViewById(R.id.dateFormatTextView);
        Spinner dateFormatSpinner = (Spinner)findViewById(R.id.dateFormatSpinner);
        
        if (displayDateCheckBox.isChecked())
        {
            dateFormatTextView.setVisibility(View.VISIBLE);
            dateFormatSpinner.setVisibility(View.VISIBLE);
        }
        else
        {
            dateFormatTextView.setVisibility(View.GONE);
            dateFormatSpinner.setVisibility(View.GONE);
        }
    }
    
    public void onClickOk(View view)
    {
        Context context = getApplicationContext();
        
        if (!isClientRawUrlPopulated())
        {
            displayWarningDialog(context.getString(R.string.clientRawUrlRequired_message));
        }
        else if (!isClientRawUrlProtocolSupported())
        {
            displayWarningDialog(context.getString(R.string.clientRawUrlProtocolNotSupported_message));
        }
        else if (isStationNameOverridden() && !isStationNamePopulated())
        {
            displayWarningDialog(context.getString(R.string.stationNameRequired_message));
        }
        else
        {
            Preferences preferences = new Preferences(getApplicationContext());
            String oldClientRawUrl = preferences.getClientRawUrl(appWidgetId);
            
            updatePreferences(context);
            
            String newClientRawUrl = preferences.getClientRawUrl(appWidgetId);
            
            setResult(RESULT_OK, resultValue);
            
            Intent updateServiceIntent = new Intent(context, UpdateWidgetService.class);
            updateServiceIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, new int[]{appWidgetId});
            
            boolean fetchFreshClientRaw = !newClientRawUrl.equals(oldClientRawUrl) || !ClientRawCache.isCached(appWidgetId);
            updateServiceIntent.putExtra(WidgetProvider.FETCH_FRESH_CLIENT_RAW, fetchFreshClientRaw);
            
            context.startService(updateServiceIntent);
            
            finish();
        }
    }

    private void updatePreferences(Context context)
    {
        Preferences preferences = new Preferences(context);
        
        preferences.setConfigured(appWidgetId, true);
        
        preferences.setClientRawUrl(appWidgetId, ((EditText)findViewById(R.id.clientRawUrlEditText)).getText().toString().trim());
        
        if (isStationNameOverridden())
        {
            preferences.setStationName(appWidgetId, ((EditText)findViewById(R.id.stationNameEditText)).getText().toString().trim());
        }
        else
        {
            preferences.removeStationName(appWidgetId);
        }
        
        preferences.setWeatherItem1(appWidgetId, (WeatherItem)((Spinner)findViewById(R.id.weatherItem1Spinner)).getSelectedItem());
        preferences.setWeatherItem2(appWidgetId, (WeatherItem)((Spinner)findViewById(R.id.weatherItem2Spinner)).getSelectedItem());
        preferences.setWeatherItem3(appWidgetId, (WeatherItem)((Spinner)findViewById(R.id.weatherItem3Spinner)).getSelectedItem());
        preferences.setWeatherItem4(appWidgetId, (WeatherItem)((Spinner)findViewById(R.id.weatherItem4Spinner)).getSelectedItem());
        preferences.setWeatherItem5(appWidgetId, (WeatherItem)((Spinner)findViewById(R.id.weatherItem5Spinner)).getSelectedItem());
        
        preferences.setTemperatureUnit(appWidgetId, (TemperatureUnit)((Spinner)findViewById(R.id.temperatureUnitSpinner)).getSelectedItem());
        preferences.setPressureUnit(appWidgetId, (PressureUnit)((Spinner)findViewById(R.id.pressureUnitSpinner)).getSelectedItem());
        preferences.setWindSpeedUnit(appWidgetId, (WindSpeedUnit)((Spinner)findViewById(R.id.windSpeedUnitSpinner)).getSelectedItem());
        preferences.setWindDirectionUnit(appWidgetId, (WindDirectionUnit)((Spinner)findViewById(R.id.windDirectionUnitSpinner)).getSelectedItem());
        preferences.setRainfallUnit(appWidgetId, (RainfallUnit)((Spinner)findViewById(R.id.rainfallUnitSpinner)).getSelectedItem());
        
        if (isDateToBeDisplayed())
        {
            preferences.setDateFormat(appWidgetId, (DateFormat)((Spinner)findViewById(R.id.dateFormatSpinner)).getSelectedItem());
        }
        else
        {
            preferences.removeDateFormat(appWidgetId);
        }
        
        preferences.setTimeFormat(appWidgetId, (TimeFormat)((Spinner)findViewById(R.id.timeFormatSpinner)).getSelectedItem());

        preferences.setConnectionTimeout(appWidgetId, (Timeout)((Spinner)findViewById(R.id.connectionTimeoutSpinner)).getSelectedItem());
        preferences.setReadTimeout(appWidgetId, (Timeout)((Spinner)findViewById(R.id.readTimeoutSpinner)).getSelectedItem());
        
        preferences.setTransparent(appWidgetId, ((CheckBox)findViewById(R.id.transparentCheckBox)).isChecked());

        preferences.commit();
    }
    
    private boolean isClientRawUrlPopulated()
    {
        return ((EditText)findViewById(R.id.clientRawUrlEditText)).getText().toString().trim().length() > 0;
    }
    
    private boolean isClientRawUrlProtocolSupported()
    {
        // Either no protocol, http or https is supported
        boolean valid = false;
        
        String clientRawUrl = ((EditText)findViewById(R.id.clientRawUrlEditText)).getText().toString().trim();
        
        if (clientRawUrl.contains("://"))
        {
            if (clientRawUrl.startsWith("http://") || clientRawUrl.startsWith("https://"))
            {
                valid = true;
            }
        }
        else
        {
            valid = true;
        }
        
        return valid;
    }
    
    private boolean isStationNameOverridden()
    {
        return ((CheckBox)findViewById(R.id.overrideStationNameCheckBox)).isChecked();
    }
    
    private boolean isStationNamePopulated()
    {
        return ((EditText)findViewById(R.id.stationNameEditText)).getText().toString().trim().length() > 0;
    }

    private boolean isDateToBeDisplayed()
    {
        return ((CheckBox)findViewById(R.id.displayDateCheckBox)).isChecked();
    }
    
    private void displayWarningDialog(String warningMessage)
    {
        AlertDialog alertDialog = new AlertDialog.Builder(this).create();
        
        alertDialog.setTitle(R.string.app_name);
        alertDialog.setMessage(warningMessage);
        alertDialog.setButton(AlertDialog.BUTTON_NEUTRAL, "OK", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss();
            }
        });

        alertDialog.show();
    }
    
    public void onClickAbout(View view)
    {
        Resources resources = getResources();
        
        String aboutTitle =
                MessageFormat.format(resources.getString(R.string.about_title),
                        resources.getString(R.string.app_name));
        
        TextView message = new TextView(this);
        message.setText(Html.fromHtml(resources.getString(R.string.about_message)));
        message.setPadding(5, 5, 5, 5);
        message.setGravity(Gravity.CENTER_HORIZONTAL);
        message.setMovementMethod(LinkMovementMethod.getInstance());
        
        AlertDialog alertDialog = new AlertDialog.Builder(this).create();
        
        alertDialog.setTitle(aboutTitle);
        alertDialog.setView(message);
        alertDialog.setButton(AlertDialog.BUTTON_NEUTRAL, "OK", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss();
            }
        });
        alertDialog.setIcon(R.drawable.ic_launcher);

        alertDialog.show();
    }
}




Java Source Code List

com.waynedgrant.cirrus.UpdateWidgetService.java
com.waynedgrant.cirrus.WidgetConfigActivity.java
com.waynedgrant.cirrus.WidgetProvider.java
com.waynedgrant.cirrus.clientraw.ClientRawCache.java
com.waynedgrant.cirrus.clientraw.ClientRawRequest.java
com.waynedgrant.cirrus.clientraw.ClientRawResponse.java
com.waynedgrant.cirrus.clientraw.ClientRawUrl.java
com.waynedgrant.cirrus.clientraw.ClientRaw.java
com.waynedgrant.cirrus.clientraw.RetrieveClientRawTask.java
com.waynedgrant.cirrus.measures.Conditions.java
com.waynedgrant.cirrus.measures.Pressure.java
com.waynedgrant.cirrus.measures.Rainfall.java
com.waynedgrant.cirrus.measures.Temperature.java
com.waynedgrant.cirrus.measures.Trend.java
com.waynedgrant.cirrus.measures.WeatherItem.java
com.waynedgrant.cirrus.measures.WindDirection.java
com.waynedgrant.cirrus.measures.WindSpeed.java
com.waynedgrant.cirrus.preferences.Preferences.java
com.waynedgrant.cirrus.presentation.colorizers.TemperatureColorizer.java
com.waynedgrant.cirrus.presentation.colorizers.UvIndexColorizer.java
com.waynedgrant.cirrus.presentation.colorizers.WeatherItemColorizer.java
com.waynedgrant.cirrus.presentation.formatters.ConditionsFormatter.java
com.waynedgrant.cirrus.presentation.formatters.DateFormat.java
com.waynedgrant.cirrus.presentation.formatters.DateFormatter.java
com.waynedgrant.cirrus.presentation.formatters.FormattedWeatherItem.java
com.waynedgrant.cirrus.presentation.formatters.HumidityFormatter.java
com.waynedgrant.cirrus.presentation.formatters.PressureFormatter.java
com.waynedgrant.cirrus.presentation.formatters.RainfallFormatter.java
com.waynedgrant.cirrus.presentation.formatters.RainfallRateFormatter.java
com.waynedgrant.cirrus.presentation.formatters.SolarPercentageFormatter.java
com.waynedgrant.cirrus.presentation.formatters.SolarRadiationFormatter.java
com.waynedgrant.cirrus.presentation.formatters.StringFormatter.java
com.waynedgrant.cirrus.presentation.formatters.TemperatureFormatter.java
com.waynedgrant.cirrus.presentation.formatters.TimeFormat.java
com.waynedgrant.cirrus.presentation.formatters.TimeFormatter.java
com.waynedgrant.cirrus.presentation.formatters.TrendFormatter.java
com.waynedgrant.cirrus.presentation.formatters.UvIndexFormatter.java
com.waynedgrant.cirrus.presentation.formatters.WeatherItemFormatter.java
com.waynedgrant.cirrus.presentation.formatters.WindDirectionFormatter.java
com.waynedgrant.cirrus.presentation.formatters.WindSpeedFormatter.java
com.waynedgrant.cirrus.units.CardinalDirection.java
com.waynedgrant.cirrus.units.PressureUnit.java
com.waynedgrant.cirrus.units.RainfallUnit.java
com.waynedgrant.cirrus.units.TemperatureUnit.java
com.waynedgrant.cirrus.units.WindDirectionUnit.java
com.waynedgrant.cirrus.units.WindSpeedUnit.java
com.waynedgrant.cirrus.update.Timeout.java