• R/O
  • SSH
  • HTTPS

observoice: 提交


Commit MetaInfo

修訂286 (tree)
時間2012-10-28 22:06:07
作者uchan_nos

Log Message

Reintegrate 29115-reviewgraph/observoice

Change Summary

差異

--- trunk/ov-client/observoice/src/jp/sourceforge/observoice/adapter/CommentListAdapter.java (revision 285)
+++ trunk/ov-client/observoice/src/jp/sourceforge/observoice/adapter/CommentListAdapter.java (revision 286)
@@ -1,7 +1,6 @@
11 package jp.sourceforge.observoice.adapter;
22
33 import java.util.ArrayList;
4-import java.util.Collections;
54 import java.util.List;
65
76 import jp.sourceforge.observoice.entity.Comment;
@@ -14,7 +13,7 @@
1413
1514 /**
1615 * コメントリストのアダプター
17- *
16+ *
1817 * @author rtakizawa
1918 */
2019 public class CommentListAdapter extends ArrayAdapter<Comment> {
--- trunk/ov-client/observoice/src/jp/sourceforge/observoice/adapter/SearchedLectureListAdapter.java (revision 285)
+++ trunk/ov-client/observoice/src/jp/sourceforge/observoice/adapter/SearchedLectureListAdapter.java (revision 286)
@@ -4,15 +4,12 @@
44 import java.util.List;
55
66 import jp.sourceforge.observoice.R;
7-import jp.sourceforge.observoice.R.id;
87 import jp.sourceforge.observoice.entity.Course;
9-
108 import android.content.Context;
119 import android.view.LayoutInflater;
1210 import android.view.View;
1311 import android.view.ViewGroup;
1412 import android.widget.ArrayAdapter;
15-import android.widget.Button;
1613 import android.widget.ListView;
1714 import android.widget.TextView;
1815
--- trunk/ov-client/observoice/src/jp/sourceforge/observoice/adapter/ReviewLecturePagerAdapter.java (revision 285)
+++ trunk/ov-client/observoice/src/jp/sourceforge/observoice/adapter/ReviewLecturePagerAdapter.java (revision 286)
@@ -1,65 +1,45 @@
11 package jp.sourceforge.observoice.adapter;
22
3-import jp.sourceforge.observoice.R;
4-import jp.sourceforge.observoice.R.layout;
5-import android.support.v4.view.PagerAdapter;
6-import android.support.v4.view.ViewPager;
7-import android.view.LayoutInflater;
8-import android.view.View;
9-import android.view.ViewGroup;
10-import android.widget.ImageView;
11-import android.widget.ListView;
3+import jp.sourceforge.observoice.fragment.CommentListFragment;
4+import jp.sourceforge.observoice.fragment.UnderstandabilityChartFragment;
5+import android.support.v4.app.Fragment;
6+import android.support.v4.app.FragmentManager;
7+import android.support.v4.app.FragmentStatePagerAdapter;
128
139 /**
1410 * 復習ページのスワイプ部分のアダプタ
15- *
11+ *
1612 * @author rtakizawa
1713 */
18-public class ReviewLecturePagerAdapter extends PagerAdapter {
14+public class ReviewLecturePagerAdapter extends FragmentStatePagerAdapter {
1915
20- private ListView mReviewCommentListView;
21- private ImageView mGraphView; //dummy
16+ private Fragment[] fragments = new Fragment[2];
2217
23- private int[] pages = { R.layout.comment_list_fragment, R.layout.graph_fragment };
24-
25- public ReviewLecturePagerAdapter(LayoutInflater inflater) {
26- mReviewCommentListView = (ListView) inflater.inflate(R.layout.comment_list_fragment, null);
27- mGraphView = (ImageView) inflater.inflate(R.layout.graph_fragment, null);
18+ public ReviewLecturePagerAdapter(FragmentManager fm) {
19+ super(fm);
2820 }
2921
3022 @Override
31- public Object instantiateItem(ViewGroup container, int position) {
32- View view = null;
33- switch (pages[position]) {
34- case R.layout.comment_list_fragment:
35- view = mReviewCommentListView;
36- break;
37- case R.layout.graph_fragment:
38- view = mGraphView;
39- break;
40- }
41- container.addView(view);
42- return view;
23+ public Fragment getItem(int position) {
24+ Fragment f = null;
25+ switch (position) {
26+ case 0:
27+ f = new CommentListFragment();
28+ break;
29+ case 1:
30+ f = new UnderstandabilityChartFragment();
31+ break;
32+ }
33+ fragments[position] = f;
34+ return f;
4335 }
4436
4537 @Override
4638 public int getCount() {
47- return pages.length;
39+ return 2;
4840 }
49-
50- @Override
51- public void destroyItem(ViewGroup container, int position, Object object) {
52- ((ViewPager) container).removeView((View) object);
53- }
5441
55- @Override
56- public boolean isViewFromObject(View view, Object object) {
57- // TODO Auto-generated method stub
58- return view.equals(object);
42+ public Fragment getCachedItem(int position) {
43+ return fragments[position];
5944 }
60-
61- public ListView getCommentListView() {
62- return mReviewCommentListView;
63- }
64-
6545 }
--- trunk/ov-client/observoice/src/jp/sourceforge/observoice/ReviewLectureActivity.java (revision 285)
+++ trunk/ov-client/observoice/src/jp/sourceforge/observoice/ReviewLectureActivity.java (revision 286)
@@ -4,17 +4,16 @@
44 import java.text.SimpleDateFormat;
55 import java.util.ArrayList;
66 import java.util.Calendar;
7-import java.util.Collections;
8-import java.util.Comparator;
97 import java.util.HashMap;
108 import java.util.List;
119 import java.util.Map;
1210
13-import jp.sourceforge.observoice.adapter.CommentListAdapter;
1411 import jp.sourceforge.observoice.adapter.ReviewLecturePagerAdapter;
1512 import jp.sourceforge.observoice.entity.Comment;
1613 import jp.sourceforge.observoice.entity.WatchingCourseInfo;
1714 import jp.sourceforge.observoice.exception.ObsvException;
15+import jp.sourceforge.observoice.fragment.CommentListFragment;
16+import jp.sourceforge.observoice.fragment.UnderstandabilityChartFragment;
1817 import jp.sourceforge.observoice.network.RequestConfiguration;
1918 import jp.sourceforge.observoice.network.response.CommentListResponse;
2019 import jp.sourceforge.observoice.network.response.ObsvResponseObject;
@@ -21,19 +20,20 @@
2120 import jp.sourceforge.observoice.network.task.GetCommentListTask;
2221 import jp.sourceforge.observoice.network.task.ObsvNetworkListener;
2322 import jp.sourceforge.observoice.util.Util;
24-import roboguice.activity.RoboActivity;
23+import roboguice.activity.RoboFragmentActivity;
2524 import roboguice.inject.InjectExtra;
2625 import roboguice.inject.InjectView;
2726 import android.app.AlertDialog;
28-import android.content.Context;
27+import android.app.DatePickerDialog;
28+import android.app.DatePickerDialog.OnDateSetListener;
2929 import android.os.Bundle;
30+import android.support.v4.app.Fragment;
3031 import android.support.v4.view.ViewPager;
31-import android.view.LayoutInflater;
32+import android.util.Log;
3233 import android.view.View;
33-import android.widget.AdapterView;
34-import android.widget.ArrayAdapter;
35-import android.widget.ListView;
36-import android.widget.Spinner;
34+import android.view.View.OnClickListener;
35+import android.widget.Button;
36+import android.widget.DatePicker;
3737
3838 /**
3939 * 復習画面
@@ -41,18 +41,39 @@
4141 * @author torikawa
4242 * @author rtakizawa
4343 */
44-public class ReviewLectureActivity extends RoboActivity {
44+public class ReviewLectureActivity extends RoboFragmentActivity
45+ implements OnClickListener {
4546
46- @InjectView(R.id.review_lecture_day_selecter)
47- private Spinner mDaySelector;
47+ /**
48+ * 日付選択画面(カレンダー or DatePickerDialogなど)により選択された日付を表す
49+ * @author uchan_nos
50+ */
51+ public static class SelectedDate {
52+ public final int year, month, dayOfMonth;
53+ public SelectedDate(int year, int month, int dayOfMonth) {
54+ this.year = year;
55+ this.month = month;
56+ this.dayOfMonth = dayOfMonth;
57+ }
58+ public SelectedDate(SelectedDate date) {
59+ this.year = date.year;
60+ this.month = date.month;
61+ this.dayOfMonth = date.dayOfMonth;
62+ }
63+ }
64+
4865 @InjectView(R.id.review_lecture_viewpager)
4966 private ViewPager mViewPager;
5067 @InjectExtra("ReviewLectureInfo")
5168 private WatchingCourseInfo mReviewLecture;
69+ @InjectView(R.id.day_begin_select_button)
70+ private Button mDayBeginButton;
71+ @InjectView(R.id.day_end_select_button)
72+ private Button mDayEndButton;
5273
5374 private int mCourceId;
5475
55- private Context mContext;
76+ private SelectedDate mSelectedDateBegin, mSelectedDateEnd;
5677
5778 /**
5879 * このアクティビティで使用する日付の文字列表現
@@ -75,14 +96,22 @@
7596
7697 mRequestConfiguration = RequestConfiguration.load(Util.getObsvSharedPreferences(this));
7798
78- mContext = this;
79-
8099 mCourceId = mReviewLecture.getCourse().getCourceId();
81100 mCommentMap = new HashMap<String, List<Comment>>();
82101
102+ /*
83103 mPagerAdapter = new ReviewLecturePagerAdapter(
84104 (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE));
105+ */
106+ mPagerAdapter = new ReviewLecturePagerAdapter(getSupportFragmentManager());
85107 mViewPager.setAdapter(mPagerAdapter);
108+
109+ Calendar today = Calendar.getInstance();
110+ mSelectedDateEnd = new SelectedDate(today.get(Calendar.YEAR), today.get(Calendar.MONTH), today.get(Calendar.DAY_OF_MONTH));
111+ mSelectedDateBegin = new SelectedDate(mSelectedDateEnd);
112+
113+ mDayBeginButton.setText(toStringWithFormat(mFormat, mSelectedDateBegin));
114+ mDayEndButton.setText(toStringWithFormat(mFormat, mSelectedDateEnd));
86115 }
87116
88117 @Override
@@ -100,8 +129,10 @@
100129 List<Comment> responseComments = ((CommentListResponse) response).getCommentList();
101130 mapComments(responseComments);
102131
103- mDaySelector.setAdapter(createCommentDatesAdapter());
104- mDaySelector.setOnItemSelectedListener(new DaySelectorListener(mContext));
132+ mDayBeginButton.setOnClickListener(ReviewLectureActivity.this);
133+ mDayEndButton.setOnClickListener(ReviewLectureActivity.this);
134+
135+ updateCommentList();
105136 }
106137
107138 @Override
@@ -135,25 +166,6 @@
135166 }
136167
137168 /**
138- * コメントリストから日付のリストをもつアダプターを作成する
139- *
140- * @return
141- */
142- private ArrayAdapter<String> createCommentDatesAdapter() {
143- List<String> dates = new ArrayList<String>();
144- for (Map.Entry<String, List<Comment>> entry : mCommentMap.entrySet()) {
145- dates.add(entry.getKey());
146- }
147- Collections.sort(dates);
148-
149- ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
150- android.R.layout.simple_spinner_dropdown_item, dates);
151- adapter.setDropDownViewResource(android.R.layout.select_dialog_item);
152-
153- return adapter;
154- }
155-
156- /**
157169 * Calendarから日付の文字列表現を得る
158170 *
159171 * @param cal
@@ -164,31 +176,138 @@
164176 }
165177
166178 /**
167- * 日付選択ドロップダウンのリスナー
179+ * 日付選択ボタンが押された
168180 *
169- * @author rtakizawa
181+ * @author uchan_nos
170182 */
171- private class DaySelectorListener implements AdapterView.OnItemSelectedListener {
183+ @Override
184+ public void onClick(View v) {
185+ if (v == mDayBeginButton) {
186+ // mSelectedDateBeginを初期値として日付選択ダイアログを表示
187+ DatePickerDialog dialog = new DatePickerDialog(this,
188+ new OnDateSetListener() {
189+ @Override
190+ public void onDateSet(DatePicker view, int year, int monthOfYear,
191+ int dayOfMonth) {
192+ // 日付が選択されたらmSelectedDateBeginを新しい日付に更新
193+ mSelectedDateBegin = new SelectedDate(year, monthOfYear, dayOfMonth);
194+ // ボタンのテキストも選択された日付に更新
195+ mDayBeginButton.setText(toStringWithFormat(mFormat, mSelectedDateBegin));
172196
173- private Context mContext;
197+ updateCommentList();
198+ }
199+ },
200+ mSelectedDateBegin.year, mSelectedDateBegin.month, mSelectedDateBegin.dayOfMonth);
201+ dialog.show();
202+ } else if (v == mDayEndButton) {
203+ DatePickerDialog dialog = new DatePickerDialog(this,
204+ new OnDateSetListener() {
205+ @Override
206+ public void onDateSet(DatePicker view, int year, int monthOfYear,
207+ int dayOfMonth) {
208+ mSelectedDateEnd = new SelectedDate(year, monthOfYear, dayOfMonth);
209+ mDayEndButton.setText(toStringWithFormat(mFormat, mSelectedDateEnd));
174210
175- public DaySelectorListener(Context context) {
176- mContext = context;
211+ updateCommentList();
212+ }
213+ },
214+ mSelectedDateEnd.year, mSelectedDateEnd.month, mSelectedDateEnd.dayOfMonth);
215+ dialog.show();
177216 }
217+ }
178218
179- @Override
180- public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
181- Spinner spinner = (Spinner) parent;
182- String date = spinner.getSelectedItem().toString();
183- ListView v = mPagerAdapter.getCommentListView();
184- CommentListAdapter adapter = new CommentListAdapter(mContext, mCommentMap.get(date));
185- v.setAdapter(adapter);
219+ /**
220+ * 指定された日付を指定されたフォーマットに従って変換する
221+ * @param f 日付のフォーマット
222+ * @param d 日付
223+ * @return 変換された日付を表す文字列
224+ */
225+ private static String toStringWithFormat(DateFormat f, SelectedDate d) {
226+ //return f.format(new Date(d.year - 1900, d.month, d.dayOfMonth));
227+ Calendar c = Calendar.getInstance();
228+ c.set(d.year, d.month, d.dayOfMonth);
229+ return f.format(c.getTime());
230+ }
231+
232+ /**
233+ * 現在の日付の選択範囲に従い、コメント一覧を更新
234+ */
235+ private void updateCommentList() {
236+ List<Comment> comments = new ArrayList<Comment>();
237+
238+ // 日付をbeginからendまで走査する
239+ // 開始日と終了日を完全に含めたいので、終了日を+1日する
240+ Calendar dateBegin = Calendar.getInstance();
241+ dateBegin.set(mSelectedDateBegin.year, mSelectedDateBegin.month, mSelectedDateBegin.dayOfMonth);
242+ setToBeginningOfTheDay(dateBegin);
243+ Calendar dateEnd = Calendar.getInstance();
244+ dateEnd.set(mSelectedDateEnd.year, mSelectedDateEnd.month, mSelectedDateEnd.dayOfMonth);
245+ setToBeginningOfTheDay(dateEnd);
246+ dateEnd.add(Calendar.DAY_OF_MONTH, 1);
247+
248+ Calendar date = (Calendar) dateBegin.clone();
249+ // dateが表す日付にコメントがあれば、それをcommentsに追加する
250+ for (; date.compareTo(dateEnd) <= 0; date.add(Calendar.DAY_OF_MONTH, 1)) {
251+ List<Comment> commentsOfDay = mCommentMap.get(mFormat.format(date.getTime()));
252+ if (commentsOfDay != null) {
253+ comments.addAll(commentsOfDay);
254+ }
186255 }
187256
188- @Override
189- public void onNothingSelected(AdapterView<?> arg0) {
257+ for (int i = 0; i < mPagerAdapter.getCount(); ++i) {
258+ Fragment f = mPagerAdapter.getCachedItem(i);
259+ if (f != null) {
260+ if (f instanceof UnderstandabilityChartFragment) {
261+ UnderstandabilityChartFragment ucf = (UnderstandabilityChartFragment) f;
262+
263+ long beginToEnd = dateEnd.getTimeInMillis() - dateBegin.getTimeInMillis();
264+ long diffInSecond = beginToEnd / 1000;
265+ long diffInMinute = diffInSecond / 60;
266+ long diffInHour = diffInMinute / 60;
267+ long diffInDay = diffInHour / 24;
268+ long diffInMonth = diffInDay / 30;
269+
270+
271+ int numDivision = 1;
272+ String dateFormatString = "yyyy-MM-dd HH-mm";
273+ if (diffInDay <= 1) { // 1日以下
274+ numDivision = (int) (beginToEnd / (1000L * 60 * 60)); // 1時間ごと
275+ dateFormatString = "HH";
276+ } else if (diffInDay <= 30) {
277+ numDivision = (int) (beginToEnd / (1000L * 60 * 60 * 24));
278+ dateFormatString = "dd";
279+ } else if (diffInDay <= 60) {
280+ numDivision = (int) (beginToEnd / (1000L * 60 * 60 * 24 * 7));
281+ dateFormatString = "dd";
282+ } else if (diffInMonth <= 12) {
283+ numDivision = (int) (beginToEnd / (1000L * 60 * 60 * 24 * 30));
284+ dateFormatString = "MM";
285+ }
286+ if (numDivision > 0) {
287+ Log.d("obsv", "setDivision: " + beginToEnd + "msec / " + numDivision);
288+ ucf.setDivision(beginToEnd / numDivision, numDivision);
289+ } else {
290+ Log.d("obsv", "setDivision: default: " + beginToEnd + "msec / " + 1);
291+ ucf.setDivision(beginToEnd, 1);
292+ }
293+ ucf.setDateFormat(new SimpleDateFormat(dateFormatString));
294+
295+ ucf.update(comments, dateEnd.getTimeInMillis());
296+ } else if (f instanceof CommentListFragment) {
297+ ((CommentListFragment) f).update(comments);
298+ }
299+ }
190300 }
301+ }
191302
303+ /**
304+ * カレンダーを0時ちょうどに修正する
305+ * @param c
306+ */
307+ private void setToBeginningOfTheDay(Calendar c) {
308+ c.set(Calendar.HOUR_OF_DAY, 0);
309+ c.set(Calendar.MINUTE, 0);
310+ c.set(Calendar.SECOND, 0);
311+ c.set(Calendar.MILLISECOND, 0);
192312 }
193-
194313 }
--- trunk/ov-client/observoice/src/jp/sourceforge/observoice/LectureActivity.java (revision 285)
+++ trunk/ov-client/observoice/src/jp/sourceforge/observoice/LectureActivity.java (revision 286)
@@ -1,5 +1,6 @@
11 package jp.sourceforge.observoice;
22
3+import java.text.SimpleDateFormat;
34 import java.util.List;
45
56 import jp.sourceforge.observoice.fragment.CommentListFragment;
@@ -126,7 +127,9 @@
126127 Fragment f = null;
127128 switch (position) {
128129 case 0:
129- f = new UnderstandabilityChartFragment();
130+ UnderstandabilityChartFragment ucf = new UnderstandabilityChartFragment();
131+ ucf.setDateFormat(new SimpleDateFormat("ss"));
132+ f = ucf;
130133 break;
131134 case 1:
132135 f = new CommentListFragment();
--- trunk/ov-client/observoice/src/jp/sourceforge/observoice/fragment/UnderstandabilityChartFragment.java (revision 285)
+++ trunk/ov-client/observoice/src/jp/sourceforge/observoice/fragment/UnderstandabilityChartFragment.java (revision 286)
@@ -47,6 +47,11 @@
4747 private XYMultipleSeriesRenderer mChartRenderer = null;
4848 private LinearLayout mLayout = null;
4949
50+ private long mDateDivision = 1 * 1000; // データの区切り時間
51+ private int mNumDivision = 10; // グラフに表示するデータ数
52+
53+ private DateFormat mDateFormat = DateFormat.getTimeInstance(DateFormat.MEDIUM);
54+
5055 @Override
5156 public void onCreate(Bundle savedInstanceState) {
5257 Log.d("chart", "UCF.onCreate");
@@ -90,6 +95,7 @@
9095 renderer.setChartTitleTextSize(20);
9196 renderer.setLabelsTextSize(15);
9297 renderer.setLegendTextSize(15);
98+ renderer.setPanEnabled(false, false);
9399 for (int i = 0; i < colors.length; i++) {
94100 SimpleSeriesRenderer r = new SimpleSeriesRenderer();
95101 r.setColor(colors[i]);
@@ -102,7 +108,7 @@
102108 renderer.setXTitle("時刻");
103109 renderer.setYTitle("理解度");
104110 renderer.setXAxisMin(0.5);
105- renderer.setXAxisMax(10.5);
111+ renderer.setXAxisMax(mNumDivision + 0.5);
106112 renderer.setYAxisMin(-2);
107113 renderer.setYAxisMax(2);
108114 renderer.setAxesColor(Color.GRAY);
@@ -129,10 +135,7 @@
129135 public void update(List<Comment> comments, long currentTime) {
130136 Log.d("chart", "UCF.update");
131137
132- final DateFormat dateFormat = DateFormat.getTimeInstance(DateFormat.MEDIUM);
133- final long dateBegin = currentTime - 10 * 1000; // グラフに表示したいデータの開始時刻
134- final long dateDivision = 1000; // グラフに表示したいデータの間隔
135- final int numDivision = 10; // グラフに表示するデータの数
138+ final long dateBegin = currentTime - mDateDivision * mNumDivision; // グラフに表示したいデータの開始時刻
136139
137140 for (Comment c : comments) {
138141 mChartManager.addReaction(new Reaction(
@@ -143,14 +146,15 @@
143146
144147 // 指定した時刻範囲のデータからチャートデータを生成
145148 XYMultipleSeriesDataset dataset =
146- mChartManager.buildDataset(dateBegin, dateDivision, numDivision, true);
149+ mChartManager.buildDataset(dateBegin, mDateDivision, mNumDivision, true);
147150
148151 // X軸のラベルを設定
149152 mChartRenderer.clearXTextLabels();
150- for (int i = 0; i < numDivision; ++i) {
153+ for (int i = 0; i < mNumDivision; ++i) {
151154 mChartRenderer.addXTextLabel(i + 1,
152- dateFormat.format(new Date(dateBegin + dateDivision * i)));
155+ mDateFormat.format(new Date(dateBegin + mDateDivision * i)));
153156 }
157+ mChartRenderer.setXAxisMax(mNumDivision + 0.5);
154158
155159 // Y軸の表示範囲を設定
156160 double ymax = 0;
@@ -163,4 +167,22 @@
163167 // 再描画を指示
164168 mLayout.invalidate();
165169 }
170+
171+ /**
172+ * データの分割方法を設定する
173+ * @param dateDivision データ1つの時間間隔
174+ * @param numDivision データの分割個数
175+ */
176+ public void setDivision(long dateDivision, int numDivision) {
177+ this.mDateDivision = dateDivision;
178+ this.mNumDivision = numDivision;
179+ }
180+
181+ /**
182+ * X軸のラベル描画に用いる時刻フォーマットをセットする
183+ * @param dateFormat
184+ */
185+ public void setDateFormat(DateFormat dateFormat) {
186+ this.mDateFormat = dateFormat;
187+ }
166188 }
--- trunk/ov-client/observoice/res/values/strings.xml (revision 285)
+++ trunk/ov-client/observoice/res/values/strings.xml (revision 286)
@@ -72,6 +72,8 @@
7272 <string name="get_watching_courses">ウォッチ一覧取得</string>
7373 <string name="debug_please_select_from_option">他のデバッグメニューは右上のメニューから選べます</string>
7474 <string name="review_day_selecter_label_string">日付:</string>
75+ <string name="review_day_begin">から</string>
76+ <string name="review_day_end">まで</string>
7577 <string name="get_account">アカウント情報取得><</string>
7678
7779 </resources>
\ No newline at end of file
--- trunk/ov-client/observoice/res/layout/review_lecture.xml (revision 285)
+++ trunk/ov-client/observoice/res/layout/review_lecture.xml (revision 286)
@@ -10,18 +10,26 @@
1010 android:layout_weight="1"
1111 android:orientation="vertical" >
1212
13+ <Button
14+ android:id="@+id/day_begin_select_button"
15+ android:layout_width="wrap_content"
16+ android:layout_height="wrap_content" />
17+
1318 <TextView
14- android1:id="@+id/review_day_selecter_label"
1519 android1:layout_width="fill_parent"
1620 android1:layout_height="wrap_content"
17- android1:text="@string/review_day_selecter_label_string"
18- android1:textAppearance="?android:attr/textAppearanceLarge" />
21+ android1:text="@string/review_day_begin" />
1922
20- <Spinner
21- android:id="@+id/review_lecture_day_selecter"
22- android:layout_width="fill_parent"
23- android:layout_height="wrap_content" />
23+ <Button
24+ android:id="@+id/day_end_select_button"
25+ android:layout_width="wrap_content"
26+ android:layout_height="wrap_content" />
2427
28+ <TextView
29+ android1:layout_width="fill_parent"
30+ android1:layout_height="wrap_content"
31+ android1:text="@string/review_day_end" />
32+
2533 </LinearLayout>
2634
2735 <android.support.v4.view.ViewPager
Show on old repository browser