package cl.monsoon.s1next.view.fragment; import android.content.Context; import android.os.Bundle; import android.preference.Preference; import android.preference.PreferenceCategory; import android.preference.PreferenceFragment; import android.preference.PreferenceScreen; import android.support.annotation.NonNull; import android.support.annotation.Size; import cl.monsoon.s1next.R; import cl.monsoon.s1next.view.activity.OpenSourceLicenseDetailActivity; public final class OpenSourceLicensesFragment extends PreferenceFragment { private static final String PREF_KEY_LIBRARIES = "pref_key_libraries"; private static final String PREF_KEY_FILES = "pref_key_files"; private static final String EXTRAS_LIBRARY_OR_FILE_OPEN_SOURCE_LICENSE_FILE_PATH = "libraries_or_files_open_source_license_file_path"; private static final String ASSET_PATH_OPEN_SOURCE_LICENSES_LIBRARY = "text/license/library/"; private static final String ASSET_PATH_OPEN_SOURCE_LICENSES_FILE = "text/license/file/"; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.preference_open_souce_licenses); PreferenceScreen preferenceScreen = getPreferenceScreen(); setupLibrariesPreference(preferenceScreen); setupFilesPreference(preferenceScreen); } @Override public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, @NonNull Preference preference) { OpenSourceLicenseDetailActivity.startOpenSourceLicenseDetailActivity(preference.getContext(), preference.getTitle().toString(), preference.peekExtras().getString( EXTRAS_LIBRARY_OR_FILE_OPEN_SOURCE_LICENSE_FILE_PATH)); return true; } /** * Adds libraries to its PreferenceCategory programmatically. */ private void setupLibrariesPreference(PreferenceScreen preferenceScreen) { PreferenceCategory preferenceCategory = (PreferenceCategory) preferenceScreen.findPreference(PREF_KEY_LIBRARIES); Context context = preferenceCategory.getContext(); for (@Size(2) String[] libraryInfos : getLibrariesInfos()) { Preference preference = new Preference(context); preference.setTitle(libraryInfos[0]); preference.setPersistent(false); // put this library's license path to extra preference.getExtras().putString(EXTRAS_LIBRARY_OR_FILE_OPEN_SOURCE_LICENSE_FILE_PATH, ASSET_PATH_OPEN_SOURCE_LICENSES_LIBRARY + libraryInfos[1]); preferenceCategory.addPreference(preference); } } /** * Adds files to its PreferenceCategory programmatically. */ private void setupFilesPreference(PreferenceScreen preferenceScreen) { PreferenceCategory preferenceCategory = (PreferenceCategory) preferenceScreen.findPreference(PREF_KEY_FILES); Context context = preferenceCategory.getContext(); for (@Size(2) String[] fileInfos : getFilesInfo()) { Preference preference = new Preference(context); preference.setTitle(fileInfos[0]); preference.setPersistent(false); // put this file's license path to extra preference.getExtras().putString(EXTRAS_LIBRARY_OR_FILE_OPEN_SOURCE_LICENSE_FILE_PATH, ASSET_PATH_OPEN_SOURCE_LICENSES_FILE + fileInfos[1]); preferenceCategory.addPreference(preference); } } /** * Gets each library's name and its license's name. */ private String[][] getLibrariesInfos() { return new String[][]{ {"AdapterDelegates", "ADAPTER_DELEGATES"}, {"Android Support Library", "ANDROID_SUPPORT"}, {"Apache Commons Lang", "APACHE_LICENSE_2.0"}, {"android-apt", "UNLICENSE"}, {"Bugsnag Android", "BUGSNAG_ANDROID"}, {"Dagger 2", "DAGGER_2"}, {"Data Binding", "ANDROID_SUPPORT"}, {"FindBugs-jsr305", "APACHE_LICENSE_2.0"}, {"Glide", "GLIDE"}, {"Gradle Retrolambda Plugin", "GRADLE_RETROLAMBDA_PLUGIN"}, {"Gradle Versions Plugin", "APACHE_LICENSE_2.0"}, {"Guava", "APACHE_LICENSE_2.0"}, {"jackson-databind", "APACHE_LICENSE_2.0"}, {"LeakCanary", "LEAKCANARY"}, {"OkHttp", "APACHE_LICENSE_2.0"}, {"Retrofit", "RETROFIT"}, {"Retrolambda", "APACHE_LICENSE_2.0"}, {"RxAndroid", "RX_ANDROID"}, {"RxJava", "RX_JAVA"} }; } /** * Gets each file's name and its license's name. */ private String[][] getFilesInfo() { return new String[][]{ {"BezelImageView.java", "BEZEL_IMAGE_VIEW"}, {"CookieStoreImpl.java", "COOKIE_STORE_IMPL"}, {"FragmentStatePagerAdapter.java", "FRAGMENT_STATE_PAGER_ADAPTER"}, {"PhotoView.java", "PHOTO_VIEW"} }; } }