1*90c8c64dSAndroid Build Coastguard Worker /* 2*90c8c64dSAndroid Build Coastguard Worker * Copyright 2013 The Android Open Source Project 3*90c8c64dSAndroid Build Coastguard Worker * 4*90c8c64dSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 5*90c8c64dSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 6*90c8c64dSAndroid Build Coastguard Worker * You may obtain a copy of the License at 7*90c8c64dSAndroid Build Coastguard Worker * 8*90c8c64dSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 9*90c8c64dSAndroid Build Coastguard Worker * 10*90c8c64dSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 11*90c8c64dSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 12*90c8c64dSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*90c8c64dSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 14*90c8c64dSAndroid Build Coastguard Worker * limitations under the License. 15*90c8c64dSAndroid Build Coastguard Worker */ 16*90c8c64dSAndroid Build Coastguard Worker 17*90c8c64dSAndroid Build Coastguard Worker package com.example.android.activityinstrumentation; 18*90c8c64dSAndroid Build Coastguard Worker 19*90c8c64dSAndroid Build Coastguard Worker import android.app.Activity; 20*90c8c64dSAndroid Build Coastguard Worker import android.content.SharedPreferences; 21*90c8c64dSAndroid Build Coastguard Worker import android.os.Bundle; 22*90c8c64dSAndroid Build Coastguard Worker import android.preference.PreferenceManager; 23*90c8c64dSAndroid Build Coastguard Worker import android.view.View; 24*90c8c64dSAndroid Build Coastguard Worker import android.widget.AdapterView; 25*90c8c64dSAndroid Build Coastguard Worker import android.widget.ArrayAdapter; 26*90c8c64dSAndroid Build Coastguard Worker import android.widget.Spinner; 27*90c8c64dSAndroid Build Coastguard Worker 28*90c8c64dSAndroid Build Coastguard Worker import java.util.ArrayList; 29*90c8c64dSAndroid Build Coastguard Worker import java.util.Arrays; 30*90c8c64dSAndroid Build Coastguard Worker 31*90c8c64dSAndroid Build Coastguard Worker /** 32*90c8c64dSAndroid Build Coastguard Worker * Basic activity with a spinner. The spinner should persist its position to disk every time a 33*90c8c64dSAndroid Build Coastguard Worker * new selection is made. 34*90c8c64dSAndroid Build Coastguard Worker */ 35*90c8c64dSAndroid Build Coastguard Worker public class MainActivity extends Activity { 36*90c8c64dSAndroid Build Coastguard Worker 37*90c8c64dSAndroid Build Coastguard Worker /** Shared preferences key: Holds spinner position. Must not be negative. */ 38*90c8c64dSAndroid Build Coastguard Worker private static final String PREF_SPINNER_POS = "spinner_pos"; 39*90c8c64dSAndroid Build Coastguard Worker /** Magic constant to indicate that no value is stored for PREF_SPINNER_POS. */ 40*90c8c64dSAndroid Build Coastguard Worker private static final int PREF_SPINNER_VALUE_ISNULL = -1; 41*90c8c64dSAndroid Build Coastguard Worker /** Values for display in spinner. */ 42*90c8c64dSAndroid Build Coastguard Worker private static final String[] SPINNER_VALUES = new String[] { 43*90c8c64dSAndroid Build Coastguard Worker "Select Weather...", "Sunny", "Partly Cloudy", "Cloudy", "Rain", "Snow", "Hurricane"}; 44*90c8c64dSAndroid Build Coastguard Worker 45*90c8c64dSAndroid Build Coastguard Worker // Constants representing each of the options in SPINNER_VALUES. Declared package-private 46*90c8c64dSAndroid Build Coastguard Worker // so that they can be accessed from our test suite. 47*90c8c64dSAndroid Build Coastguard Worker static final int WEATHER_NOSELECTION = 0; 48*90c8c64dSAndroid Build Coastguard Worker static final int WEATHER_SUNNY = 1; 49*90c8c64dSAndroid Build Coastguard Worker static final int WEATHER_PARTLY_CLOUDY = 2; 50*90c8c64dSAndroid Build Coastguard Worker static final int WEATHER_CLOUDY = 3; 51*90c8c64dSAndroid Build Coastguard Worker static final int WEATHER_RAIN = 4; 52*90c8c64dSAndroid Build Coastguard Worker static final int WEATHER_SNOW = 5; 53*90c8c64dSAndroid Build Coastguard Worker static final int WEATHER_HURRICANE = 6; 54*90c8c64dSAndroid Build Coastguard Worker 55*90c8c64dSAndroid Build Coastguard Worker /** Handle to default shared preferences for this activity. */ 56*90c8c64dSAndroid Build Coastguard Worker private SharedPreferences mPrefs; 57*90c8c64dSAndroid Build Coastguard Worker /** Handle to the spinner in this Activity's layout. */ 58*90c8c64dSAndroid Build Coastguard Worker private Spinner mSpinner; 59*90c8c64dSAndroid Build Coastguard Worker 60*90c8c64dSAndroid Build Coastguard Worker /** 61*90c8c64dSAndroid Build Coastguard Worker * Setup activity state. 62*90c8c64dSAndroid Build Coastguard Worker * 63*90c8c64dSAndroid Build Coastguard Worker * @param savedInstanceState 64*90c8c64dSAndroid Build Coastguard Worker */ 65*90c8c64dSAndroid Build Coastguard Worker @Override onCreate(Bundle savedInstanceState)66*90c8c64dSAndroid Build Coastguard Worker protected void onCreate(Bundle savedInstanceState) { 67*90c8c64dSAndroid Build Coastguard Worker super.onCreate(savedInstanceState); 68*90c8c64dSAndroid Build Coastguard Worker 69*90c8c64dSAndroid Build Coastguard Worker // Inflate UI from res/layout/activity_main.xml 70*90c8c64dSAndroid Build Coastguard Worker setContentView(R.layout.sample_main); 71*90c8c64dSAndroid Build Coastguard Worker 72*90c8c64dSAndroid Build Coastguard Worker // Get handle to default shared preferences for this activity 73*90c8c64dSAndroid Build Coastguard Worker mPrefs = PreferenceManager.getDefaultSharedPreferences(MainActivity.this); 74*90c8c64dSAndroid Build Coastguard Worker 75*90c8c64dSAndroid Build Coastguard Worker // Populate spinner with sample values from an array 76*90c8c64dSAndroid Build Coastguard Worker mSpinner = (Spinner) findViewById(R.id.spinner); 77*90c8c64dSAndroid Build Coastguard Worker mSpinner.setAdapter( 78*90c8c64dSAndroid Build Coastguard Worker new ArrayAdapter<String>( 79*90c8c64dSAndroid Build Coastguard Worker this, // Context 80*90c8c64dSAndroid Build Coastguard Worker android.R.layout.simple_list_item_1, // Layout 81*90c8c64dSAndroid Build Coastguard Worker new ArrayList<String>(Arrays.asList(SPINNER_VALUES)) // Data source 82*90c8c64dSAndroid Build Coastguard Worker )); 83*90c8c64dSAndroid Build Coastguard Worker 84*90c8c64dSAndroid Build Coastguard Worker // Read in a sample value, if it's not set. 85*90c8c64dSAndroid Build Coastguard Worker int selection = mPrefs.getInt(PREF_SPINNER_POS, PREF_SPINNER_VALUE_ISNULL); 86*90c8c64dSAndroid Build Coastguard Worker if (selection != PREF_SPINNER_VALUE_ISNULL) { 87*90c8c64dSAndroid Build Coastguard Worker mSpinner.setSelection(selection); 88*90c8c64dSAndroid Build Coastguard Worker } 89*90c8c64dSAndroid Build Coastguard Worker 90*90c8c64dSAndroid Build Coastguard Worker // Callback to persist spinner data whenever a new value is selected. This will be the 91*90c8c64dSAndroid Build Coastguard Worker // focus of our sample unit test. 92*90c8c64dSAndroid Build Coastguard Worker mSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 93*90c8c64dSAndroid Build Coastguard Worker 94*90c8c64dSAndroid Build Coastguard Worker // The methods below commit the ID of the currently selected item in the spinner 95*90c8c64dSAndroid Build Coastguard Worker // to disk, using a SharedPreferences file. 96*90c8c64dSAndroid Build Coastguard Worker // 97*90c8c64dSAndroid Build Coastguard Worker // Note: A common mistake here is to forget to call .commit(). Try removing this 98*90c8c64dSAndroid Build Coastguard Worker // statement and running the tests to watch them fail. 99*90c8c64dSAndroid Build Coastguard Worker @Override 100*90c8c64dSAndroid Build Coastguard Worker public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 101*90c8c64dSAndroid Build Coastguard Worker mPrefs.edit().putInt(PREF_SPINNER_POS, position).commit(); 102*90c8c64dSAndroid Build Coastguard Worker } 103*90c8c64dSAndroid Build Coastguard Worker 104*90c8c64dSAndroid Build Coastguard Worker @Override 105*90c8c64dSAndroid Build Coastguard Worker public void onNothingSelected(AdapterView<?> parent) { 106*90c8c64dSAndroid Build Coastguard Worker mPrefs.edit().remove(PREF_SPINNER_POS).commit(); 107*90c8c64dSAndroid Build Coastguard Worker } 108*90c8c64dSAndroid Build Coastguard Worker }); 109*90c8c64dSAndroid Build Coastguard Worker } 110*90c8c64dSAndroid Build Coastguard Worker } 111