Skip to content

Commit 287e9c3

Browse files
committedSep 19, 2019
Improve preferences/menu design on older Android devices
1 parent c3d43da commit 287e9c3

File tree

6 files changed

+208
-86
lines changed

6 files changed

+208
-86
lines changed
 
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
package org.scid.android;
2+
3+
import android.content.res.Configuration;
4+
import android.os.Bundle;
5+
import android.preference.PreferenceActivity;
6+
import android.support.annotation.LayoutRes;
7+
import android.support.annotation.Nullable;
8+
import android.support.v7.app.ActionBar;
9+
import android.support.v7.app.AppCompatDelegate;
10+
import android.support.v7.widget.Toolbar;
11+
import android.view.MenuInflater;
12+
import android.view.View;
13+
import android.view.ViewGroup;
14+
15+
/**
16+
* A {@link android.preference.PreferenceActivity} which implements and proxies the necessary calls
17+
* to be used with AppCompat.
18+
* Taken from https://www.androidhive.info/2017/07/android-implementing-preferences-settings-screen/
19+
*/
20+
public abstract class AppCompatPreferenceActivity extends PreferenceActivity {
21+
22+
private AppCompatDelegate mDelegate;
23+
24+
@Override
25+
protected void onCreate(Bundle savedInstanceState) {
26+
getDelegate().installViewFactory();
27+
getDelegate().onCreate(savedInstanceState);
28+
super.onCreate(savedInstanceState);
29+
}
30+
31+
@Override
32+
protected void onPostCreate(Bundle savedInstanceState) {
33+
super.onPostCreate(savedInstanceState);
34+
getDelegate().onPostCreate(savedInstanceState);
35+
}
36+
37+
public ActionBar getSupportActionBar() {
38+
return getDelegate().getSupportActionBar();
39+
}
40+
41+
public void setSupportActionBar(@Nullable Toolbar toolbar) {
42+
getDelegate().setSupportActionBar(toolbar);
43+
}
44+
45+
@Override
46+
public MenuInflater getMenuInflater() {
47+
return getDelegate().getMenuInflater();
48+
}
49+
50+
@Override
51+
public void setContentView(@LayoutRes int layoutResID) {
52+
getDelegate().setContentView(layoutResID);
53+
}
54+
55+
@Override
56+
public void setContentView(View view) {
57+
getDelegate().setContentView(view);
58+
}
59+
60+
@Override
61+
public void setContentView(View view, ViewGroup.LayoutParams params) {
62+
getDelegate().setContentView(view, params);
63+
}
64+
65+
@Override
66+
public void addContentView(View view, ViewGroup.LayoutParams params) {
67+
getDelegate().addContentView(view, params);
68+
}
69+
70+
@Override
71+
protected void onPostResume() {
72+
super.onPostResume();
73+
getDelegate().onPostResume();
74+
}
75+
76+
@Override
77+
protected void onTitleChanged(CharSequence title, int color) {
78+
super.onTitleChanged(title, color);
79+
getDelegate().setTitle(title);
80+
}
81+
82+
@Override
83+
public void onConfigurationChanged(Configuration newConfig) {
84+
super.onConfigurationChanged(newConfig);
85+
getDelegate().onConfigurationChanged(newConfig);
86+
}
87+
88+
@Override
89+
protected void onStop() {
90+
super.onStop();
91+
getDelegate().onStop();
92+
}
93+
94+
@Override
95+
protected void onDestroy() {
96+
super.onDestroy();
97+
getDelegate().onDestroy();
98+
}
99+
100+
public void invalidateOptionsMenu() {
101+
getDelegate().invalidateOptionsMenu();
102+
}
103+
104+
private AppCompatDelegate getDelegate() {
105+
if (mDelegate == null) {
106+
mDelegate = AppCompatDelegate.create(this, null);
107+
}
108+
return mDelegate;
109+
}
110+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package org.scid.android;
2+
3+
import android.os.Bundle;
4+
import android.preference.ListPreference;
5+
import android.preference.PreferenceFragment;
6+
7+
import static org.scid.android.Preferences.DATA_ENGINE_NAME;
8+
import static org.scid.android.Preferences.DATA_ENGINE_NAMES;
9+
10+
public class MainPreferenceFragment extends PreferenceFragment {
11+
@Override
12+
public void onCreate(Bundle savedInstanceState) {
13+
super.onCreate(savedInstanceState);
14+
addPreferencesFromResource(R.xml.preferences);
15+
String[] engineNames = getActivity().getIntent().getStringArrayExtra(DATA_ENGINE_NAMES);
16+
String engineName = getActivity().getIntent().getStringExtra(DATA_ENGINE_NAME);
17+
ListPreference enginePreference = (ListPreference) findPreference("analysisEngine");
18+
enginePreference.setEntryValues(engineNames);
19+
enginePreference.setEntries(engineNames);
20+
enginePreference.setDefaultValue(engineName);
21+
}
22+
}
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,24 @@
11
package org.scid.android;
22

33
import android.os.Bundle;
4-
import android.preference.ListPreference;
5-
import android.preference.PreferenceActivity;
4+
import android.view.MenuItem;
65

7-
public class Preferences extends PreferenceActivity {
8-
public static final String DATA_ENGINE_NAME = "org.scid.android.engine.name";
9-
public static final String DATA_ENGINE_NAMES = "org.scid.android.engine.names";
6+
public class Preferences extends AppCompatPreferenceActivity {
7+
public static final String DATA_ENGINE_NAME = "org.scid.android.engine.name";
8+
public static final String DATA_ENGINE_NAMES = "org.scid.android.engine.names";
109

11-
@Override
12-
public void onCreate(Bundle savedInstanceState) {
13-
super.onCreate(savedInstanceState);
14-
addPreferencesFromResource(R.xml.preferences);
15-
String [] engineNames = getIntent().getStringArrayExtra(DATA_ENGINE_NAMES);
16-
String engineName = getIntent().getStringExtra(DATA_ENGINE_NAME);
17-
ListPreference enginePreference = (ListPreference)findPreference("analysisEngine");
18-
enginePreference.setEntryValues(engineNames);
19-
enginePreference.setEntries(engineNames);
20-
enginePreference.setDefaultValue(engineName);
21-
}
10+
@Override
11+
public void onCreate(Bundle savedInstanceState) {
12+
super.onCreate(savedInstanceState);
13+
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
14+
getFragmentManager().beginTransaction().replace(android.R.id.content, new MainPreferenceFragment()).commit();
15+
}
16+
17+
@Override
18+
public boolean onOptionsItemSelected(MenuItem item) {
19+
if (item.getItemId() == android.R.id.home) {
20+
onBackPressed();
21+
}
22+
return super.onOptionsItemSelected(item);
23+
}
2224
}

‎scidOnTheGo/src/main/res/menu/options_menu.xml

+23-27
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,38 @@
11
<?xml version="1.0" encoding="utf-8"?>
2-
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
2+
<menu xmlns:app="http://schemas.android.com/apk/res-auto"
3+
xmlns:android="http://schemas.android.com/apk/res/android" >
34

5+
<item
6+
android:id="@+id/item_mode"
7+
android:title="@string/menu_mode"
8+
app:showAsAction="always">
9+
<menu>
10+
<group android:checkableBehavior="single" >
11+
<item
12+
android:id="@+id/item_review_mode"
13+
android:title="@string/menu_review_mode">
14+
</item>
15+
<item
16+
android:id="@+id/item_analysis_mode"
17+
android:title="@string/menu_analysis_mode">
18+
</item>
19+
<item
20+
android:id="@+id/item_study_mode"
21+
android:title="@string/menu_study_mode">
22+
</item>
23+
</group>
24+
</menu>
25+
</item>
426
<item
527
android:id="@+id/item_file"
628
android:title="@string/menu_file">
7-
8-
<!-- android:icon="@drawable/ic_menu_archive" -->
929
<menu>
1030
<item
1131
android:id="@+id/item_create_database"
1232
android:title="@string/create_db_title">
1333
</item>
1434
<item
1535
android:id="@+id/item_open_file"
16-
android:icon="@drawable/ic_menu_archive"
1736
android:title="@string/menu_open_db">
1837
</item>
1938
<item
@@ -34,9 +53,6 @@
3453
<item
3554
android:id="@+id/item_game"
3655
android:title="@string/menu_game">
37-
38-
<!-- android:icon="@drawable/ic_menu_archive" -->
39-
<!-- create empty sub-menu for easy access within code -->
4056
<menu>
4157
<item
4258
android:id="@+id/item_goto_game"
@@ -71,26 +87,6 @@
7187
</group>
7288
</menu>
7389
</item>
74-
<item
75-
android:id="@+id/item_mode"
76-
android:title="@string/menu_mode">
77-
<menu>
78-
<group android:checkableBehavior="single" >
79-
<item
80-
android:id="@+id/item_review_mode"
81-
android:title="@string/menu_review_mode">
82-
</item>
83-
<item
84-
android:id="@+id/item_analysis_mode"
85-
android:title="@string/menu_analysis_mode">
86-
</item>
87-
<item
88-
android:id="@+id/item_study_mode"
89-
android:title="@string/menu_study_mode">
90-
</item>
91-
</group>
92-
</menu>
93-
</item>
9490
<item
9591
android:id="@+id/item_edit"
9692
android:title="@string/menu_edit">

‎scidOnTheGo/src/main/res/menu/options_menu_tablet.xml

+35-40
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,39 @@
11
<?xml version="1.0" encoding="utf-8"?>
2-
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
2+
<menu xmlns:app="http://schemas.android.com/apk/res-auto"
3+
xmlns:android="http://schemas.android.com/apk/res/android" >
34

5+
<item
6+
android:id="@+id/item_mode"
7+
android:title="@string/menu_mode"
8+
app:showAsAction="always">
9+
<menu>
10+
<group android:checkableBehavior="single" >
11+
<item
12+
android:id="@+id/item_review_mode"
13+
android:title="@string/menu_review_mode">
14+
</item>
15+
<item
16+
android:id="@+id/item_analysis_mode"
17+
android:title="@string/menu_analysis_mode">
18+
</item>
19+
<item
20+
android:id="@+id/item_study_mode"
21+
android:title="@string/menu_study_mode">
22+
</item>
23+
</group>
24+
</menu>
25+
</item>
426
<item
527
android:id="@+id/item_file"
6-
android:showAsAction="ifRoom"
7-
android:title="@string/menu_file">
8-
9-
<!-- android:icon="@drawable/ic_menu_archive" -->
28+
android:title="@string/menu_file"
29+
app:showAsAction="ifRoom">
1030
<menu>
1131
<item
1232
android:id="@+id/item_create_database"
1333
android:title="@string/create_db_title">
1434
</item>
1535
<item
1636
android:id="@+id/item_open_file"
17-
android:icon="@drawable/ic_menu_archive"
1837
android:title="@string/menu_open_db">
1938
</item>
2039
<item
@@ -30,22 +49,19 @@
3049
<item
3150
android:id="@+id/item_gamelist"
3251
android:icon="@drawable/ic_menu_list"
33-
android:showAsAction="ifRoom"
34-
android:title="@string/menu_game_list">
52+
android:title="@string/menu_game_list"
53+
app:showAsAction="ifRoom">
3554
</item>
3655
<item
3756
android:id="@+id/item_search"
3857
android:icon="@drawable/ic_menu_search"
39-
android:showAsAction="ifRoom"
40-
android:title="@string/search">
58+
android:title="@string/search"
59+
app:showAsAction="ifRoom">
4160
</item>
4261
<item
4362
android:id="@+id/item_game"
44-
android:showAsAction="ifRoom"
45-
android:title="@string/menu_game">
46-
47-
<!-- android:icon="@drawable/ic_menu_archive" -->
48-
<!-- create empty sub-menu for easy access within code -->
63+
android:title="@string/menu_game"
64+
app:showAsAction="ifRoom">
4965
<menu>
5066
<item
5167
android:id="@+id/item_goto_game"
@@ -80,31 +96,10 @@
8096
</group>
8197
</menu>
8298
</item>
83-
<item
84-
android:id="@+id/item_mode"
85-
android:showAsAction="ifRoom"
86-
android:title="@string/menu_mode">
87-
<menu>
88-
<group android:checkableBehavior="single" >
89-
<item
90-
android:id="@+id/item_review_mode"
91-
android:title="@string/menu_review_mode">
92-
</item>
93-
<item
94-
android:id="@+id/item_analysis_mode"
95-
android:title="@string/menu_analysis_mode">
96-
</item>
97-
<item
98-
android:id="@+id/item_study_mode"
99-
android:title="@string/menu_study_mode">
100-
</item>
101-
</group>
102-
</menu>
103-
</item>
10499
<item
105100
android:id="@+id/item_edit"
106-
android:showAsAction="ifRoom"
107-
android:title="@string/menu_edit">
101+
android:title="@string/menu_edit"
102+
app:showAsAction="ifRoom">
108103
<menu>
109104
<item
110105
android:id="@+id/item_paste_clipboard"
@@ -130,9 +125,9 @@
130125
</item>
131126
<item
132127
android:id="@+id/item_share"
133-
android:showAsAction="ifRoom"
134128
android:icon="@drawable/ic_menu_share"
135-
android:title="@string/menu_share">
129+
android:title="@string/menu_share"
130+
app:showAsAction="ifRoom">
136131
<menu>
137132
<item
138133
android:id="@+id/item_share_game"

‎scidOnTheGo/src/main/res/values/themes.xml

-3
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,6 @@
77
<item name="colorAccent">@color/accent</item>
88
</style>
99

10-
<style name="PrefsTheme" parent="@style/Theme.AppCompat">
11-
</style>
12-
1310
<style name="listViewPrefs" parent="@android:style/Widget.ListView">
1411
<item name="android:cacheColorHint">@android:color/transparent</item>
1512
</style>

0 commit comments

Comments
 (0)
Failed to load comments.