package org.fox.ttcomics2; import android.accounts.Account; import android.accounts.AccountManager; import android.app.Activity; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.content.SharedPreferences; import android.content.pm.ApplicationInfo; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.os.Build; import android.os.Bundle; import android.preference.Preference; import android.preference.PreferenceFragment; import android.preference.PreferenceManager; import android.widget.Toast; import org.fox.ttcomics2.sync.SyncClient; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Locale; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; public class PreferencesFragment extends PreferenceFragment { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.preferences); } public void onResume() { super.onResume(); String version = "?"; int versionCode = -1; String buildTimestamp = "N/A"; try { Activity activity = getActivity(); PackageInfo packageInfo = activity.getPackageManager(). getPackageInfo(activity.getPackageName(), 0); version = packageInfo.versionName; versionCode = packageInfo.versionCode; ApplicationInfo appInfo = activity.getPackageManager(). getApplicationInfo(activity.getPackageName(), 0); ZipFile zf = new ZipFile(appInfo.sourceDir); ZipEntry ze = zf.getEntry("classes.dex"); long time = ze.getTime(); buildTimestamp = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss", Locale.getDefault()).format(time); findPreference("version").setSummary(getString(R.string.prefs_version, version, versionCode)); findPreference("build_timestamp").setSummary(getString(R.string.prefs_build_timestamp, buildTimestamp)); } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } final SharedPreferences prefs = PreferenceManager .getDefaultSharedPreferences(getActivity().getApplicationContext()); Preference dirPref = findPreference("comics_directory"); dirPref.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference preference) { ((PreferencesActivity)getActivity()).startPicker(); return true; } }); Preference clearPref = findPreference("clear_sync_data"); clearPref.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference preference) { AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); builder.setMessage(R.string.dialog_clear_data_title) .setCancelable(false) .setPositiveButton(R.string.dialog_clear_data, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { String googleAccount = getGoogleAccount(); SyncClient m_syncClient = new SyncClient(); if (googleAccount != null) { m_syncClient.setOwner(googleAccount); } else { if (Build.HARDWARE.equals("goldfish")) { m_syncClient.setOwner("TEST-ACCOUNT"); } else { m_syncClient.setOwner(null); SharedPreferences.Editor editor = prefs.edit(); editor.putBoolean("use_position_sync", false); editor.apply(); Toast toast = Toast.makeText(getActivity(), R.string.error_sync_no_account, Toast.LENGTH_SHORT); toast.show(); } } if (m_syncClient.hasOwner()) { m_syncClient.clearData(null); } } }) .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { dialog.cancel(); } }); AlertDialog alert = builder.create(); alert.show(); return false; } }); } public String getGoogleAccount() { AccountManager manager = (AccountManager) getActivity().getSystemService(Context.ACCOUNT_SERVICE); Account[] list = manager.getAccounts(); for (Account account: list) { if (account.type.equalsIgnoreCase("com.google")) { return account.name; } } return null; } }