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