/**
DR Radio 2 is developed by Jacob Nordfalk, Hanafi Mughrabi and Frederik Aagaard.
Some parts of the code are loosely based on Sveriges Radio Play for Android.
DR Radio 2 for Android is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License version 2 as published by
the Free Software Foundation.
DR Radio 2 for Android 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
DR Radio 2 for Android. If not, see <http://www.gnu.org/licenses/>.
*/
package dk.dr.radio.diverse;
/**
*
* @author j
*/
import android.app.Activity;
import android.app.Application;
import android.app.NotificationManager;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.Uri;
import android.os.Build;
import android.os.Handler;
import android.preference.PreferenceManager;
import android.widget.Toast;
import com.bugsense.trace.BugSenseHandler;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import dk.dr.radio.R;
import dk.dr.radio.afspilning.Afspiller;
import dk.dr.radio.akt_v3.BasisAktivitet;
import dk.dr.radio.data.DRData;
import dk.dr.radio.data.JsonIndlaesning;
public class App extends Application {
public static App instans;
public static SharedPreferences prefs;
private static ConnectivityManager connectivityManager;
private static String versionName;
public static NotificationManager notificationManager;
public static boolean udvikling = true;
public static Handler forgrundstråd = new Handler();
@Override
public void onCreate() {
BugSenseHandler.initAndStartSession(this, "57c90f98");
super.onCreate();
instans = instans = this;
connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
prefs = PreferenceManager.getDefaultSharedPreferences(this);
// HTTP-forbindelser havde en fejl præ froyo, men jeg har også set problemet på Xperia Play, der er 2.3.4 (!)
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {
System.setProperty("http.keepAlive", "false");
}
try {
Class.forName("android.os.AsyncTask"); // Fix for http://code.google.com/p/android/issues/detail?id=20915
App.versionName = App.instans.getPackageManager().getPackageInfo(App.instans.getPackageName(), PackageManager.GET_ACTIVITIES).versionName;
if (Log.EMULATOR) App.versionName += " UDV";
App.versionName += "/" + Build.MODEL + " " + Build.PRODUCT;
} catch (Exception e) {
Log.rapporterFejl(e);
}
try {
DRData.instans = new DRData();
// indlæs stamdata fra Prefs hvis de findes
String stamdatastr = prefs.getString(DRData.STAMDATA_URL, null);
if (stamdatastr == null) {
// Indlæs fra raw this vi ikke har nogle cachede stamdata i prefs
InputStream is = getResources().openRawResource(R.raw.stamdata_android29);
stamdatastr = JsonIndlaesning.læsInputStreamSomStreng(is);
}
DRData.instans.stamdata = JsonIndlaesning.parseStamdata(stamdatastr);
// Kanalvalg. Tjek først Preferences, brug derefter JSON-filens forvalgte kanal
DRData.instans.aktuelKanalkode = prefs.getString(DRData.NØGLE_kanal, DRData.instans.aktuelKanalkode = DRData.instans.stamdata.json.optString("forvalgt"));
DRData.instans.aktuelKanal = DRData.instans.stamdata.kanalkodeTilKanal.get(DRData.instans.aktuelKanalkode);
DRData.instans.afspiller = new Afspiller();
String url = DRData.instans.findKanalUrlFraKode(DRData.instans.aktuelKanal);
DRData.instans.afspiller.setKanal(DRData.instans.aktuelKanal.longName, url);
} catch (Exception ex) {
// TODO popop-advarsel til bruger om intern fejl og rapporter til udvikler-dialog
Log.rapporterFejl(ex);
}
}
/*
* Version fra
* http://developer.android.com/training/basics/network-ops/managing.html
*/
public static boolean erOnline() {
NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
return (networkInfo != null && networkInfo.isConnected());
}
public static BasisAktivitet aktivitetIForgrunden = null;
public static BasisAktivitet senesteAktivitetIForgrunden = null;
private static int erIGang = 0;
public static void sætErIGang(boolean netværkErIGang) {
boolean før = erIGang > 0;
erIGang += netværkErIGang ? 1 : -1;
boolean nu = erIGang > 0;
if (udvikling) Log.d("erIGang = " + erIGang);
if (før != nu && aktivitetIForgrunden != null) forgrundstråd.post(setProgressBarIndeterminateVisibility);
}
private static Runnable setProgressBarIndeterminateVisibility = new Runnable() {
public void run() {
Activity a = aktivitetIForgrunden; // trådsikkerhed
if (a != null) {
a.setProgressBarIndeterminateVisibility(erIGang > 0);
}
}
};
public void onResume(BasisAktivitet akt) {
//((NotificationManager) getSystemService("notification")).cancelAll();
akt.setProgressBarIndeterminateVisibility(erIGang > 0);
senesteAktivitetIForgrunden = aktivitetIForgrunden = akt;
}
public void onPause() {
aktivitetIForgrunden = null;
}
public static void langToast(String txt) {
Log.d("langToast(" + txt);
if (aktivitetIForgrunden == null) txt = "DR Radio:\n" + txt;
final String txt2 = txt;
forgrundstråd.post(new Runnable() {
@Override
public void run() {
Toast.makeText(instans, txt2, Toast.LENGTH_LONG).show();
}
});
}
public static void kortToast(String txt) {
Log.d("kortToast(" + txt);
if (aktivitetIForgrunden == null) txt = "DR Radio:\n" + txt;
final String txt2 = txt;
forgrundstråd.post(new Runnable() {
@Override
public void run() {
Toast.makeText(instans, txt2, Toast.LENGTH_SHORT).show();
}
});
}
public static void kontakt(Activity akt, String emne, String txt, String vedhæftning) {
String[] modtagere;
try {
modtagere = JsonIndlaesning.jsonArrayTilArrayListString(DRData.instans.stamdata.json.getJSONArray("feedback_modtagere")).toArray(new String[0]);
} catch (Exception ex) {
Log.e("JSONParsning af feedback_modtagere", ex);
modtagere = new String[]{"MIKP@dr.dk", "fraa@dr.dk", "jacob.nordfalk@gmail.com"};
}
Intent i = new Intent(Intent.ACTION_SEND);
i.setType("plain/text");
i.putExtra(Intent.EXTRA_EMAIL, modtagere);
i.putExtra(Intent.EXTRA_SUBJECT, emne);
if (vedhæftning != null) try {
String xmlFilename = "programlog.txt";
//noinspection AccessStaticViaInstance
FileOutputStream fos = akt.openFileOutput(xmlFilename, akt.MODE_WORLD_READABLE);
fos.write(vedhæftning.getBytes());
fos.close();
Uri uri = Uri.fromFile(new File(akt.getFilesDir().getAbsolutePath(), xmlFilename));
txt += "\n\nRul op øverst i meddelelsen og giv din feedback, tak.";
i.putExtra(Intent.EXTRA_STREAM, uri);
} catch (Exception e) {
Log.e(e);
txt += "\n" + e;
}
i.putExtra(Intent.EXTRA_TEXT, txt);
// akt.startActivity(Intent.createChooser(i, "Send meddelelse..."));
try {
akt.startActivity(i);
} catch (Exception e) {
e.printStackTrace();
Log.d(txt);
Log.d(vedhæftning);
}
}
}