Android Open Source - GeoLog Settings Fragment






From Project

Back to project page GeoLog.

License

The source code is released under:

Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUC...

If you think the Android project GeoLog listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

/*
 * Copyright (C) 2013 Jorrit "Chainfire" Jongma
 */*w  w w .  j  av  a  2  s  .c  om*/
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package eu.chainfire.geolog.ui;

import java.util.Locale;

import eu.chainfire.geolog.R;

import android.annotation.SuppressLint;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.DialogInterface.OnClickListener;
import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.res.Resources;
import android.net.Uri;
import android.os.Bundle;
import android.preference.ListPreference;
import android.preference.Preference;
import android.preference.PreferenceCategory;
import android.preference.PreferenceManager;
import android.preference.PreferenceScreen;
import android.preference.Preference.OnPreferenceClickListener;
import android.support.v4.content.LocalBroadcastManager;
import android.view.View;

@SuppressLint("NewApi")
public class 
  SettingsFragment 
extends 
  PreferenceListFragment
implements
  OnSharedPreferenceChangeListener
{
    public static final String APP_TITLE = "GeoLog";
    public static final String APP_COPYRIGHT = "Copyright (C) 2013 - Chainfire";
    public static final String APP_WEBSITE_URL = "http://forum.xda-developers.com/showthread.php?t=2386317";

  public static final String NOTIFY_BROADCAST = "eu.chainfire.geolog.PREFERENCES.UPDATED";
  public static final String EXTRA_KEY = "eu.chainfire.geolog.EXTRA.KEY";

  public static final String PREF_FOLLOW_SHOWN = "follow_shown";
    public static final String PREF_CURRENT_PROFILE = "current_profile";
    
    public static final float METER_FEET_RATIO = 3.28084f;
    public static final String PREF_UNITS = "pref_units";
    public static final String VALUE_UNITS_METRIC = "metric";
    public static final String VALUE_UNITS_IMPERIAL = "imperial";
    public static final String PREF_UNITS_DEFAULT = VALUE_UNITS_METRIC;
    
    private SharedPreferences prefs = null;
       
    private Resources resources = null;
    
    private String S(int id) { return resources.getString(id); }
    @SuppressWarnings("unused")
  private String[] SA(int id) { return resources.getStringArray(id); }   
    
    private ListPreference prefUnits = null;
    
  @Override
  protected PreferenceScreen createPreferenceHierarchy(PreferenceManager prefMan) {
    PreferenceScreen root = prefMan.createPreferenceScreen(getActivity());
    
    resources = getActivity().getResources();

    prefs = PreferenceManager.getDefaultSharedPreferences(getActivity());
    
    String app = APP_TITLE;
      PackageManager pm = getActivity().getPackageManager();
      if (pm != null) {
        try {
          PackageInfo pi = pm.getPackageInfo(getActivity().getPackageName(), 0);
          if (pi != null) {
            app = app + " v" + pi.versionName;
          }
        } catch (Exception e) {
        }
      }      
        
    Preference copyright = new Preference(getActivity());
    copyright.setTitle(app);
    copyright.setSummary(
        APP_COPYRIGHT + (char)10 + 
        "Twitter: @ChainfireXDA" + (char)10 + 
        "G+: http://google.com/+Chainfire" + (char)10 + 
        S(R.string.settings_tap_xda) 
    );
    copyright.setKey("copyright");
    copyright.setEnabled(true);
    copyright.setOnPreferenceClickListener(new OnPreferenceClickListener() {
      public boolean onPreferenceClick(Preference preference) {
        try {
          Intent i = new Intent(Intent.ACTION_VIEW);
          i.setData(Uri.parse(APP_WEBSITE_URL));
          startActivity(i);
        } catch (Exception e) {
          // no http handler installed (wtf, it happens)
        }
        return false;
      }
    });       
    root.addPreference(copyright);
    
    /* maybe one day
    if (!proPresent) {
      Preference upgrade = new Preference(getActivity());
      upgrade.setTitle(R.string.settings_upgrade);
      upgrade.setSummary(R.string.settings_upgrade_description);
      upgrade.setOnPreferenceClickListener(new OnPreferenceClickListener() {
        public boolean onPreferenceClick(Preference preference) {
          try {
            Intent i = new Intent(Intent.ACTION_VIEW);
            i.setData(Uri.parse("market://details?id=eu.chainfire.geolog.pro"));
            startActivity(i);    
          } catch (Exception e) {
            // no market installed
          }
          return false;
        }
      });              
      root.addPreference(upgrade);
    }
    */
    
    PreferenceCategory catUnits = Pref.Category(getActivity(), root, R.string.settings_category_units);
    prefUnits = Pref.List(
        getActivity(), 
        catUnits, 
        getString(R.string.settings_units_caption), 
        "", 
        getString(R.string.settings_units_popup), 
        PREF_UNITS, 
        PREF_UNITS_DEFAULT, 
        new String[] { 
          getString(R.string.settings_units_metric), 
          getString(R.string.settings_units_imperial) 
        }, 
        new String[] { 
          VALUE_UNITS_METRIC, 
          VALUE_UNITS_IMPERIAL 
        }
    );
    
    PreferenceCategory catMarket = Pref.Category(getActivity(), root, R.string.settings_category_market);      
    Pref.Preference(getActivity(), catMarket, R.string.settings_market, R.string.settings_market_description, true, new OnPreferenceClickListener() {
      public boolean onPreferenceClick(Preference preference) {
        try {
          Intent i = new Intent(Intent.ACTION_VIEW);
          i.setData(Uri.parse("market://search?q=pub:Chainfire"));
          startActivity(i);    
        } catch (Exception e) {
          // market not installed
        }
        return false;
      }
    });          
    
    Pref.Preference(getActivity(), catMarket, R.string.follow_pref_title, R.string.follow_pref_desc, true, new OnPreferenceClickListener() {      
      @Override
      public boolean onPreferenceClick(Preference preference) {
        showFollow(false);
        return false;
      }
    });
    
    int shown_follow = prefs.getInt(PREF_FOLLOW_SHOWN, 0);
    if (shown_follow == 0) {
      prefs.edit().putInt(PREF_FOLLOW_SHOWN, 1).commit();
      showFollow(true);
    }              
    
    updatePrefs(null);
    return root;        
  }
  
    private void showFollow(boolean startup) {
      if (startup) {
        AlertDialog.Builder builder = (new AlertDialog.Builder(getActivity())).
        setTitle(R.string.follow_popup_title).
        setMessage(R.string.follow_popup_desc).
        setPositiveButton(R.string.follow_twitter, new OnClickListener() {          
          @Override
          public void onClick(DialogInterface dialog, int which) {
            Intent i = new Intent(Intent.ACTION_VIEW);
            i.setData(Uri.parse("http://www.twitter.com/ChainfireXDA"));
            startActivity(i);                
          }
        }).
        setNeutralButton(R.string.follow_gplus, new OnClickListener() {          
          @Override
          public void onClick(DialogInterface dialog, int which) {
            Intent i = new Intent(Intent.ACTION_VIEW);
            i.setData(Uri.parse("http://google.com/+Chainfire"));
            startActivity(i);                
          }
        }).
        setNegativeButton(R.string.follow_nothanks, new OnClickListener() {          
          @Override
          public void onClick(DialogInterface dialog, int which) {
          }
        });
        try {
          builder.show();
        } catch (Exception e) {                  
        }        
      } else {
        AlertDialog.Builder builder = (new AlertDialog.Builder(getActivity())).
        setTitle(R.string.follow_popup_title).
        setItems(new CharSequence[] { S(R.string.follow_twitter), S(R.string.follow_gplus) }, new OnClickListener() {            
          @Override
          public void onClick(DialogInterface dialog, int which) {
            if (which == 0) {
              Intent i = new Intent(Intent.ACTION_VIEW);
              i.setData(Uri.parse("http://www.twitter.com/ChainfireXDA"));
              startActivity(i);                
            } else if (which == 1) {
              Intent i = new Intent(Intent.ACTION_VIEW);
              i.setData(Uri.parse("http://plus.google.com/b/113517319477420052449/"));
              startActivity(i);                
            }              
          }
        }).          
        setNegativeButton(R.string.generic_close, null);
        try {
          builder.show();
        } catch (Exception e) {                  
        }
      }
    }  

  @Override
  public void onViewCreated(View view, Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    prefs.registerOnSharedPreferenceChangeListener(this);
  }

  
  @Override
  public void onDestroyView() {
    prefs.unregisterOnSharedPreferenceChangeListener(this);
    super.onDestroyView();
  }
  
  public void updatePrefs(String key) {
    try {
      if ((key == null) || (key.equals(PREF_UNITS))) {
        int id = R.string.settings_units_metric;
        if (prefs.getString(PREF_UNITS, PREF_UNITS_DEFAULT).equals(VALUE_UNITS_IMPERIAL)) id = R.string.settings_units_imperial;
        prefUnits.setSummary(String.format(Locale.ENGLISH, "[ %s ]", getString(id)));
      }
      
      Intent i = new Intent(NOTIFY_BROADCAST);
      i.putExtra(EXTRA_KEY, key);
      LocalBroadcastManager.getInstance(getActivity()).sendBroadcast(i);
    } catch (Exception e) {
    }
  }
  
  @Override
  public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
    updatePrefs(key);
  }  
}




Java Source Code List

eu.chainfire.geolog.Application.java
eu.chainfire.geolog.CrashCatcher.java
eu.chainfire.geolog.Debug.java
eu.chainfire.geolog.data.Database.java
eu.chainfire.geolog.data.Exporter.java
eu.chainfire.geolog.data.LogsProvider.java
eu.chainfire.geolog.data.ProfilesProvider.java
eu.chainfire.geolog.service.BackgroundService.java
eu.chainfire.geolog.service.BootCompleteReceiver.java
eu.chainfire.geolog.ui.ExportActivity.java
eu.chainfire.geolog.ui.LogsFragment.java
eu.chainfire.geolog.ui.MainActivity.java
eu.chainfire.geolog.ui.Pref.java
eu.chainfire.geolog.ui.PreferenceListFragment.java
eu.chainfire.geolog.ui.ProfileActivity.java
eu.chainfire.geolog.ui.ProfilesFragment.java
eu.chainfire.geolog.ui.SettingsFragment.java