Search code examples
javaandroidxmlsharedpreferencespreferenceactivity

How to show app version on Preferences Activity?


Id like to add an my app version and possibly build on the my SettingsActivity.

Im trying to show an "About Phone" style activity on my app. But I dont know how to go about it.

I am currently using EditTextPreference in my preference.xml which calls a dialog on Click, but I want it to be like this, where the onClick event doesnt produce a dialog.:

Nexus 5 screenshot

SettingsActivity.java

public class SettingsActivity extends PreferenceActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    addPreferencesFromResource(R.xml.pref_general);
}

@Override
protected void onPostCreate(Bundle savedInstanceState) {
    super.onPostCreate(savedInstanceState);

    LinearLayout root = (LinearLayout)findViewById(android.R.id.list).getParent().getParent().getParent();
    Toolbar bar = (Toolbar) LayoutInflater.from(this).inflate(R.layout.tool_bar, root, false);
    root.addView(bar, 0); // insert at top
    bar.setTitle("Settings");
    bar.setNavigationOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            finish();
        }
    });
}

}

pref_general.xml

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android"
android:title="Settings">

<PreferenceCategory android:title="About" >
    <EditTextPreference
        android:title="Version"
        android:summary="@string/app_version"
        android:key="prefUsername"/>
</PreferenceCategory>

And one more thing, is there a way to get the app and build number from gradle via xml.

I know I code like a caveman and I usually manually update them in the strings.xml, but in my defense I am new to Android.


Solution

  • I ended up with this.

    enter image description here

    Instead of extending classes and whatnot I went with this

    SettingsActivity.java

    public class SettingsActivity extends PreferenceActivity {
    
    public static final String TAG = "caveman";
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    
        addPreferencesFromResource(R.xml.pref_general);
    
        Preference pref = findPreference( "developer" );
        pref.setSummary("Marathon Apps");
    
        Preference pref1 = findPreference( "version" );
        try {
            pref1.setSummary(appVersion());
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }
    }
    
    @Override
    protected void onPostCreate(Bundle savedInstanceState) {
        super.onPostCreate(savedInstanceState);
    
        LinearLayout root = (LinearLayout)findViewById(android.R.id.list).getParent().getParent().getParent();
        Toolbar bar = (Toolbar) LayoutInflater.from(this).inflate(R.layout.tool_bar, root, false);
        root.addView(bar, 0); // insert at top
        bar.setTitle("Prism");
        bar.setSubtitle("Settings");
        bar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });
    }
    
    public String appVersion() throws PackageManager.NameNotFoundException {
        PackageInfo pInfo = getPackageManager().getPackageInfo(getPackageName(), 0);
        String version = pInfo.versionName;
        return version;
    }
    

    }

    pref_general.xml

    <?xml version="1.0" encoding="utf-8"?>
    <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
    <PreferenceCategory
    android:title="About">
    <PreferenceScreen
        android:title="Developer"
        android:key="developer"
        android:summary="Marathon Apps">
    </PreferenceScreen>
    
    <PreferenceScreen
        android:title="Version"
        android:key="version"
        android:summary="1.0">
    </PreferenceScreen>
    </PreferenceCategory>
    
    
    </PreferenceScreen>