/*
* This file is part of Domodroid.
*
* Domodroid is Copyright (C) 2011 Pierre LAINE, Maxime CHOFARDET
*
* Domodroid is free software: you can redistribute it and/or modify it under the
* terms of the GNU General Public License as published by the Free Software
* Foundation, either version 3 of the License, or (at your option) any later
* version.
*
* Domodroid is distributed in the hope that it will be useful, but WITHOUT ANY
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
* A PARTICULAR PURPOSE. See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along with
* Domodroid. If not, see <http://www.gnu.org/licenses/>.
*/
package Abstract;
import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.graphics.Color;
import android.graphics.Typeface;
import android.preference.PreferenceManager;
import android.telephony.PhoneNumberUtils;
import android.text.Html;
import android.view.Gravity;
import android.view.animation.Animation;
import android.view.animation.RotateAnimation;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.github.curioustechizen.ago.RelativeTimeTextView;
import org.domogik.domodroid13.R;
import java.text.DateFormat;
import java.text.NumberFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import java.util.StringTokenizer;
import activities.Graphics_Manager;
import misc.tracerengine;
public abstract class display_sensor_info {
public static void display(tracerengine Tracer, String loc_Value, Long Value_timestamp, String mytag, String parameters, TextView value, RelativeTimeTextView timestamp,
Activity activity, LinearLayout LL_featurePan, Typeface typefaceweather, Typeface typefaceawesome,
String state_key, TextView state_key_view, String stateS, String test_unite) {
TextView value1;
SharedPreferences SP_params = PreferenceManager.getDefaultSharedPreferences(activity);
if (Value_timestamp != 0) {
if (SP_params.getBoolean("widget_timestamp", false)) {
timestamp.setText(timestamp_convertion(Value_timestamp.toString(), activity));
} else {
timestamp.setReferenceTime(Value_timestamp);
}
}
try {
float formatedValue = 0;
if (loc_Value != null) {
formatedValue = calcul.Round_float(Float.parseFloat(loc_Value), 2);
Tracer.v(mytag, " Round_float the value: " + loc_Value + " to " + formatedValue);
}
if (!test_unite.equals("")) {
//Basilic add, number feature has a unit parameter
//#30 add Scale value if too big for byte, ko and Wh unit
switch (test_unite) {
case "b":
value.setText(android.text.format.Formatter.formatFileSize(activity, Long.parseLong(loc_Value)));
break;
case "ko":
value.setText(android.text.format.Formatter.formatFileSize(activity, Long.parseLong(loc_Value) * 1024));
break;
case "Wh":
//#30
value.setText(value_convertion(Tracer, mytag, formatedValue, loc_Value) + " " + test_unite);
break;
case "°":
//TODO find how to update the rotate when a new value is receive from events or mq
//remove the textView from parent LinearLayout
LL_featurePan.removeView(value);
LL_featurePan.removeView(timestamp);
//Display an arrow with font-awesome
value.setTypeface(typefaceweather, Typeface.NORMAL);
value.setText("\uf0b1");
//display the real value in smaller font
value1 = new TextView(activity);
value1.setTextSize(14);
value1.setTextColor(Color.BLACK);
value1.setText(value_convertion(Tracer, mytag, formatedValue, loc_Value) + " " + test_unite);
//Create a rotate animation for arrow with formatedValue as angle
RotateAnimation animation = new RotateAnimation(0.0f, formatedValue, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
animation.setDuration(0);
animation.setFillEnabled(true);
animation.setFillAfter(true);
animation.setFillBefore(true);
//apply animation to textView
value.startAnimation(animation);
//apply gravity and size to textview with font-awesome
value.setMinimumHeight(LL_featurePan.getHeight());
value.setMinimumWidth(100);
value.setGravity(Gravity.CENTER);
//Create an empty linearlayout that will contains the value
LinearLayout LL_Temp = new LinearLayout(activity);
//Re-add the view in parent's one
LL_Temp.addView(value1);
LL_Temp.addView(value);
LL_featurePan.addView(LL_Temp);
LL_featurePan.addView(timestamp);
break;
case "°C":
case "K":
case "°F":
value.setText(value_convertion(Tracer, mytag, formatedValue, loc_Value) + " " + test_unite);
state_key_view.setTypeface(typefaceweather, Typeface.NORMAL);
state_key_view.setText(Html.fromHtml(stateS + " " + ""), TextView.BufferType.SPANNABLE);
break;
case "bar":
case "mbar":
case "Pa":
value.setText(value_convertion(Tracer, mytag, formatedValue, loc_Value) + " " + test_unite);
state_key_view.setTypeface(typefaceweather, Typeface.NORMAL);
state_key_view.setText(Html.fromHtml(stateS + " " + ""), TextView.BufferType.SPANNABLE);
break;
case "ms":
case "s":
case "min":
case "h":
value.setText(value_convertion(Tracer, mytag, formatedValue, loc_Value) + " " + test_unite);
state_key_view.setTypeface(typefaceweather, Typeface.NORMAL);
state_key_view.setText(Html.fromHtml(stateS + " " + ""), TextView.BufferType.SPANNABLE);
break;
case "Year":
case "Month":
case "Day":
value.setText(value_convertion(Tracer, mytag, formatedValue, loc_Value) + " " + test_unite);
state_key_view.setTypeface(typefaceawesome, Typeface.NORMAL);
state_key_view.setText(Html.fromHtml(stateS + " " + ""), TextView.BufferType.SPANNABLE);
break;
default:
value.setText(value_convertion(Tracer, mytag, formatedValue, loc_Value) + " " + test_unite);
if (state_key.equalsIgnoreCase("current_wind_speed")) {
state_key_view.setTypeface(typefaceweather, Typeface.NORMAL);
state_key_view.setText(Html.fromHtml(stateS + " " + ""), TextView.BufferType.SPANNABLE);
} else if (state_key.equalsIgnoreCase("current_humidity")) {
state_key_view.setTypeface(typefaceweather, Typeface.NORMAL);
state_key_view.setText(Html.fromHtml(stateS + " " + ""), TextView.BufferType.SPANNABLE);
} else if (state_key.equalsIgnoreCase("weight")) {
state_key_view.setTypeface(typefaceawesome, Typeface.NORMAL);
state_key_view.setText(Html.fromHtml(stateS + " " + ""), TextView.BufferType.SPANNABLE);
}
break;
}
} else {
//It has no unit in database or in json
if (state_key.equalsIgnoreCase("temperature"))
value.setText(value_convertion(Tracer, mytag, formatedValue, loc_Value) + " °C");
else if (state_key.equalsIgnoreCase("pressure"))
value.setText(value_convertion(Tracer, mytag, formatedValue, loc_Value) + " hPa");
else if (state_key.equalsIgnoreCase("humidity"))
value.setText(value_convertion(Tracer, mytag, formatedValue, loc_Value) + " %");
else if (state_key.equalsIgnoreCase("percent"))
value.setText(value_convertion(Tracer, mytag, formatedValue, loc_Value) + " %");
else if (state_key.equalsIgnoreCase("visibility"))
value.setText(value_convertion(Tracer, mytag, formatedValue, loc_Value) + " km");
else if (state_key.equalsIgnoreCase("chill"))
value.setText(value_convertion(Tracer, mytag, formatedValue, loc_Value) + " °C");
else if (state_key.equalsIgnoreCase("speed"))
value.setText(value_convertion(Tracer, mytag, formatedValue, loc_Value) + " km/h");
else if (state_key.equalsIgnoreCase("drewpoint"))
value.setText(value_convertion(Tracer, mytag, formatedValue, loc_Value) + " °C");
else if (state_key.equalsIgnoreCase("condition-code") || state_key.toLowerCase().contains("condition_code") || state_key.toLowerCase().contains("current_code")) {
//Add try catch to avoid other case that make #1794
try {
//use xml and weather fonts here
value.setTypeface(typefaceweather, Typeface.NORMAL);
value.setText(Graphics_Manager.Names_conditioncodes(activity, (int) formatedValue));
} catch (Exception e1) {
Tracer.e(mytag, "no translation for condition-code: " + loc_Value);
value.setText(loc_Value);
}
} else if (state_key.equalsIgnoreCase("callerid")) {
value.setText(phone_convertion(Tracer, mytag, loc_Value));
} else if (state_key.toLowerCase().startsWith("rainlevel")) {
//Add try catch to avoid other case that make #1794
try {
//use xml and weather fonts here
value.setTypeface(typefaceweather, Typeface.NORMAL);
switch (loc_Value) {
case "0":
value.setText(activity.getResources().getIdentifier("wi_na", "string", activity.getPackageName()));
break;
case "1":
value.setText(activity.getResources().getIdentifier("wi_cloud", "string", activity.getPackageName()));
break;
case "3":
value.setText(activity.getResources().getIdentifier("wi_hail", "string", activity.getPackageName()));
break;
case "4":
value.setText(activity.getResources().getIdentifier("wi_rain", "string", activity.getPackageName()));
break;
case "5":
value.setText(activity.getResources().getIdentifier("wi_showers", "string", activity.getPackageName()));
break;
default:
value.setText(activity.getResources().getIdentifier("wi_na", "string", activity.getPackageName()));
break;
}
} catch (Exception e1) {
Tracer.e(mytag, "no translation for rainlevel: " + loc_Value);
e1.printStackTrace();
value.setText(loc_Value);
}
} else value.setText(value_convertion(Tracer, mytag, formatedValue, loc_Value));
}
} catch (Exception e) {
// It's probably a String that could not be converted to a float
Tracer.d(mytag, "Handler exception : new value <" + loc_Value + "> not numeric !");
try {
//todo #90
if (loc_Value.startsWith("AM") && loc_Value.contains("/PM")) {
Tracer.d(mytag, "Try to split: " + loc_Value + " in two parts to translate it");
StringTokenizer st = new StringTokenizer(loc_Value, "/");
String AM = st.nextToken();
String PM = st.nextToken();
try {
AM = AM.replace("AM ", "");
AM = activity.getResources().getString(translate.do_translate(activity, Tracer, AM));
} catch (Exception amexception) {
}
try {
PM = PM.replace("PM ", "");
PM = activity.getResources().getString(translate.do_translate(activity, Tracer, PM));
} catch (Exception pmexception) {
}
value.setText(R.string.am + " " + AM + "/" + R.string.pm + " " + PM);
} else {
if (state_key.equalsIgnoreCase("current_sunset")) {
state_key_view.setTypeface(typefaceweather, Typeface.NORMAL);
state_key_view.setText(Html.fromHtml(stateS + " " + ""), TextView.BufferType.SPANNABLE);
value.setText(hour_convertion(Tracer, mytag, loc_Value));
} else if (state_key.equalsIgnoreCase("current_sunrise")) {
state_key_view.setTypeface(typefaceweather, Typeface.NORMAL);
state_key_view.setText(Html.fromHtml(stateS + " " + ""), TextView.BufferType.SPANNABLE);
value.setText(hour_convertion(Tracer, mytag, loc_Value));
} else if (state_key.equalsIgnoreCase("current_last_updated")) {
// convert value to translated date in locale settings
try {
loc_Value = loc_Value.substring(0, loc_Value.lastIndexOf(" "));
SimpleDateFormat sdf = new SimpleDateFormat("EEE, dd MMM yyyy hh:mm a", Locale.ENGLISH);
Date testDate = sdf.parse(loc_Value);
Tracer.d(mytag + " Date conversion", "Works");
SimpleDateFormat formatter = new SimpleDateFormat("EEE dd MMM yyyy HH:mm", Locale.getDefault());
String newFormat = formatter.format(testDate);
value.setText(newFormat);
} catch (Exception ex) {
ex.printStackTrace();
Tracer.e(mytag + " Date conversion", "Error: " + ex.toString());
value.setText(loc_Value);
}
} else if (state_key.equalsIgnoreCase("callerid")) {
value.setText(phone_convertion(Tracer, mytag, loc_Value));
} else {
value.setText(translate.do_translate(activity, Tracer, loc_Value));
}
}
} catch (Exception e1) {
Tracer.d(mytag, "no translation for this STRING value: " + loc_Value);
value.setText(loc_Value);
}
}
}
public static String phone_convertion(tracerengine Tracer, String mytag, String phone) {
try {
String convert_phone = PhoneNumberUtils.formatNumber(phone);
// todo it remove the "-" like in jean-phillipe replace bye jeanphillipe
// Tracer.d(mytag, "phone convertion from:" + phone + " to " + convert_phone);
return convert_phone;
} catch (Exception ex) {
ex.printStackTrace();
Tracer.e(mytag + "Phone conversion", "Error: " + ex.toString());
return phone;
}
}
public static String value_convertion(tracerengine Tracer, String mytag, Float number, String origin_number) {
try {
String convert_number = NumberFormat.getInstance().format(number);
return convert_number;
} catch (Exception ex) {
ex.printStackTrace();
Tracer.e(mytag + "value_convertion", "Error: " + ex.toString());
return origin_number;
}
}
public static String timestamp_convertion(String timeStampStr, Context context) {
try {
DateFormat dateFormat = android.text.format.DateFormat.getDateFormat(context);
DateFormat timeFormat = DateFormat.getTimeInstance();
Date netDate = (new Date(Long.parseLong(timeStampStr)));
return (dateFormat.format(netDate) + " - " + timeFormat.format(netDate));
} catch (Exception ignored) {
return timeStampStr;
}
}
public static String hour_convertion(tracerengine Tracer, String mytag, String hour) {
// Convert value to hour and in local language
SimpleDateFormat sdf = new SimpleDateFormat("hh:mm:ss", Locale.ENGLISH);
Date testDate = null;
try {
testDate = sdf.parse(hour);
} catch (Exception ex) {
ex.printStackTrace();
Tracer.e(mytag + "Date conversion", "Error: " + ex.toString());
}
SimpleDateFormat formatter = new SimpleDateFormat("HH:mm", Locale.getDefault());
return formatter.format(testDate);
}
}