package com.kitty.poclient.common; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import android.app.Activity; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; import android.graphics.Bitmap; import android.graphics.drawable.BitmapDrawable; import android.os.Bundle; import android.os.Handler; import android.os.IBinder; import com.kitty.poclient.R; import com.kitty.poclient.activity.LoginActivity; import com.kitty.poclient.activity.WebListenActivity; import com.kitty.poclient.domain.Album; import com.kitty.poclient.domain.Artist; import com.kitty.poclient.domain.Column; import com.kitty.poclient.domain.Music; import com.kitty.poclient.domain.SearchDataObject; import com.kitty.poclient.fragment.MainFragment; import com.kitty.poclient.fragment.PlayerFragment; import com.kitty.poclient.fragment.TabWebFragment; import com.kitty.poclient.interfaces.OnCurrentPlayingInfoChangedListener; import com.kitty.poclient.interfaces.OnCurrentPlayingStateChangedListener; import com.kitty.poclient.interfaces.SelfReloader; import com.kitty.poclient.models.PlayingInfo; import com.kitty.poclient.models.StateModel; import com.kitty.poclient.util.ListviewDataPositionRecorder; public class WatchDog { // 用户名和密码 public static String currentUserId = "244987";// WatchDog.currentUserId=,WatchDog.currentUserId // = public static String currentPassword = "123456"; public static boolean getDataFinished = false; public static String sd = "0"; public static String musicIndex = ""; public static String currentDevice = ""; // public static String currentHost = "http://192.168.1.230/";// 后台服务器地址 public static String currentHost = "http://music1.zhenxian.fm/";// 后台服务器地址 // public static String currentHostTemp = "http://192.168.1.120/";// // 后台服务器地址测试版 public static String macAddress = "";// 物理地址 public static int buySubState = 0;// 用户表示第一次订阅主动请求盒子 public static Object builder;// 对话框builder对象 public static int synBoxOrservice = 1; // 0表示是从服务器中取,1表示是从box中取 public static Handler handler;// 主线程handler public static int unbindplayerstatic = 0;// 用于缓存模式取消播放状态 public static Map<String, String> clearcachemap = new HashMap<String, String>();// 用于保存需要隐藏的商品 public static int clearCacheProductType = 1;// 用于标识清除商品的类型 // ,默认是1表示专辑,5表示单曲,10表示主题 public static int reboxcontrolservice = 1;// 重连,不启动服务;如果订阅已死就要重启服务!1是用于表示第一次启动服务开启订阅 // ,5表示已经开启过订阅 public static boolean flag = true;// 终端操作 false表示是从控制端全部同步云端数据 public static Activity activity; public static long l = 0L; // public static int dbdatastate=0;//if database on create or updata while // it's update public static List<Activity> currentActivities = new ArrayList<Activity>(); public static String currentUri = ""; public static int currentPlaymode = PlayerFragment.MODE_ORDER; public static ArrayList<Music> currentList;// WatchDog.currentList=,WatchDog.currentList // = public static String currentPlayingUSBDir = null; // add by Eason Fong public static int currentListType = -1;// WatchDog.currentListType= public static long currentListId = 0L;// WatchDog.currentListId= public static Music currentPlayingMusic; public static Music currentListeningMusic;// 当前试听歌曲 public static Long currentPlayingId = 0L; // public static String currentPlayingMusicCacheState=""; public static int currentPlayingIndex = -1; public static String currentPlayingName = "未知曲目"; public static String currentArtistName = ""; public static Bitmap currentPlayingAlbumPic; public static String dialogtext = "搜索设备";// 搜索对话框title提示 public static String dialogcontent = "";// 搜索对话框内容提示 public static int ifdeviceListView = 0;// 0 表示已经发现设备并加载到设备发现列表里面 1表示没有发现 public static Object choseboxObj;// 选中的对象 // 记录用户的最近一次操作:next,prev public static String latestOperation = ""; public static int isfirstclearcache = 0; // 是否是第一次清除缓存信息 public static HashMap<Long, String> cacheStateMap = new HashMap<Long, String>(); public static HashMap<String, List<Long>> clearCacheStateMap = new HashMap<String, List<Long>>();// 保存需要显示的商品 public static WatchDog instance; public static boolean babyNotMine = false; public static int isPullFlag = 1;// 是否有上拉提示 public static boolean isBoxAlive = true;// UPNP生命属性,默认为真; public static boolean mediaOutOfService = false;// 当盒子在播放网络试听曲目或歌单时,屏蔽播放器; public static String mediaOutOfServiceReson = ""; public static boolean keybackRefersExitPro = true;// 定义键盘返回键:true指向退出程序,false指向界面回退 public static boolean hasNewBought = false; public static int upnpActionPerformCount = 0; public static boolean isSlidingMenuShown = false;// 记录侧滑菜单是否滑出 public static boolean isSlidingMenuShownInTabWeb = false;// 记录侧滑菜单是否滑出(音乐商店) public static int previousLayout = -1;// 记录应该回退至的Fragment布局 public static int currentTabPosition = MainFragment.TAB_MUSIC; public static boolean botiquesDataGot = false;// 精品聚焦主页数据是否加载完毕 public static boolean topsDataGot = false;// TOP100主页数据是否加载完毕 public static boolean genresDataGot = false;// 类型主页数据是否加载完毕 public static boolean artistsDataGot = false;// 演出者主页数据是否加载完毕 public static boolean themesDataGot = false;// 演出者主页数据是否加载完毕 /* 记录栏目详情在跳转前的数据和位置 */ public static List<Album> albumsInColumnDetail = null; public static int fvipInColumnDetail = -1; public static int lvipInColumnDetail = -1; public static int stInColumnDetail = -1; public static boolean flagInColumnDetail = false; /* 记录榜单详情在跳转前的数据和位置 */ public static List<Album> albumsInTopDetail = null; public static int fvipInTopDetail = -1; public static int lvipInTopDetail = -1; public static int stInTopDetail = -1; public static boolean flagInTopDetail = false; public static HashMap<String, ListviewDataPositionRecorder> listviewPositionMap = new HashMap<String, ListviewDataPositionRecorder>(); /* 记录搜索结果在跳转前的数据和位置 */ public static SearchDataObject sdoInSearchResult = null; public static String selectedSearchResultTabText = "全部"; // public static Integer fvipInSearchResult = -1; // public static Integer stInSearchResult = -1; public static boolean flagInSearchResult = false; public static String keywordInSearchResult = "请输入搜索关键字"; /* 记录精品聚焦在跳转前的数据和位置 */ public static List<Column> columnsInBotiques = null; public static int fvipInBotiques = -1; public static int lvipInBotiques = -1; public static int stInBotiques = -1; public static boolean flagInBotiques = false; /* 记录TOP100在跳转前的数据和位置 */ public static List<Column> columnsInTops = null; public static int fvipInTops = -1; public static int lvipInTops = -1; public static int stInTops = -1; public static boolean flagInTops = false; /* 记录类型在跳转前的数据和位置 */ public static List<Column> columnsInGenres = null; public static int fvipInGenres = -1; public static int lvipInGenres = -1; public static int stInGenres = -1; public static boolean flagInGenres = false; /* 记录艺术家在跳转前的数据和位置 */ public static List<Artist> formerArtists = null; public static String currentChosenLetter = "all"; public static int fvipInArtists = -1; public static int lvipInArtists = -1; public static int stInArtists = -1; public static boolean flagInArtists = false; public static boolean isWebListenActivityRunning = false;// 用于结束网络试听 public static WebListenActivity runningWebListenActivity = null; public static boolean searchResultFragmentRunning = false; public static boolean webListenActivityRunning = false;// 用于结束网络试听 // public static boolean localMusicUILoadOK = false; // public static boolean isLocalMusicPlayingBeforWebListen = false; // //一组代替intent传值的实验数据 // public static long albumId2send=-1; // public static String albumName2send=""; // public static Bitmap albumBitmap2send=null; // public static String albumImgurl2send=""; // public static int albumLayout2send=-1; /* 正在缓存中的数据 */ public static HashMap<Long, Integer> purchasingAlbums = new HashMap<Long, Integer>(); public static HashMap<Long, Integer> purchasingPacks = new HashMap<Long, Integer>(); public static HashMap<Long, Integer> purchasingMusics = new HashMap<Long, Integer>(); public static Long currentScrollMillis = 0L; // public static Long formerScrollMillis = 0L; public static int formerCacheSubSerialNumber = -1; public static int avSubFailCount = 0; public static int cacheSubFailCount = 0; public static int boxSubFailCount = 0; public static TabWebFragment tabWebFragment; public static SelfReloader currentSelfReloader = null;// 超时或异常出现时可重新加载的网络界面 public static BitmapDrawable albumDetailBgBitmapDrawable;// 商店专辑详情页虚化背景图 public static String boxVersionName = "未知设备版本";// 盒子版本号 public static int boxVersionCode = -1; // 控制端版本相关 public static String currentControllerVersion = "未知当前版本"; public static String latestControllerVersion = "未知最新版本"; public static String forcingUpdateCode = "-1"; public static String latestVersionDescription = "暂无描述"; public static String latestVersionapkDownloadUrl = "未知路径"; public static boolean versionsUpdateNotificationShown = false;// 每次启动只提示一次 // 重搜相关 public static boolean researchFlag = false;// 是否有重搜需求 public static ComponentName researchComponentName; public static IBinder researchIBinder; /*本地播放相关*/ public static Intent runningMusicPlayServiceIntent = null; private static PlayingInfo currentPlayingInfo = null; public static List<OnCurrentPlayingInfoChangedListener> cpiListeners=new ArrayList<OnCurrentPlayingInfoChangedListener>(); public static void setCurrentPlayingInfo(PlayingInfo playingInfo) { currentPlayingInfo = playingInfo; for(OnCurrentPlayingInfoChangedListener listener:cpiListeners){ listener.onCurrentPlayingInfoChanged(); } } /*播放状态监听*/ public static String currentState = PlayerFragment.STOPPED; public static List<OnCurrentPlayingStateChangedListener> cpsListeners=new ArrayList<OnCurrentPlayingStateChangedListener>(); public static void setCurrentPlayingState(String playingState) { currentState = playingState; for(OnCurrentPlayingStateChangedListener listener:cpsListeners){ listener.onCurrentPlayingStateChanged(); } } public static PlayingInfo getCurrentPlayingInfo() { return currentPlayingInfo; } private WatchDog() { } public static WatchDog getInstance() { if (instance == null) { instance = new WatchDog(); } return instance; } public static void killThemAll() { for (Activity activity : currentActivities) { activity.finish(); } } public static void clearData() { WatchDog.currentList = null; WatchDog.currentListType = 0; WatchDog.currentListId = 0L; WatchDog.currentPlayingIndex = 0; WatchDog.currentPlayingMusic = null; WatchDog.currentPlayingId = 0L; WatchDog.currentPlayingName = ""; WatchDog.currentArtistName = ""; WatchDog.currentState = PlayerFragment.STOPPED;// 先改为停止以停止播放器图标的跳动 WatchDog.cacheStateMap.clear(); UpnpApp.context.sendBroadcast(new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED)); } // 如果上一曲未缓存完,而当前曲目将要进入下载状态,则修改上一曲缓存状态为等待 public static void updateCachingState() { if (cacheStateMap != null && currentPlayingId != null) { System.out.println("cacheStateMap.get(currentPlayingId)=" + cacheStateMap.get(currentPlayingId)); } else { return; } if ((Music.CACHE_WAIT).equals(cacheStateMap.get(currentPlayingId))) {// 空指针 for (Long id : cacheStateMap.keySet()) { // 暂停上一曲缓存 if (cacheStateMap.get(id).equals(Music.CACHE_DOWNLOADING) && !id.equals(currentPlayingId)) { cacheStateMap.put(id, Music.CACHE_WAIT); } // 立即开始本曲目缓存 if (!cacheStateMap.get(id).equals(Music.CACHE_DOWNLOADED) && id.equals(currentPlayingId)) { cacheStateMap.put(id, Music.CACHE_DOWNLOADING); } } } } // 如果lastChange显示某支曲目开始缓存,则将其他正在缓存曲目全部置为等待 public static void clearFormerCaching(long id) { if (cacheStateMap == null || !cacheStateMap.containsKey(id)) { return; } else { for (Long id0 : cacheStateMap.keySet()) { if (cacheStateMap.get(id0).equals(Music.CACHE_DOWNLOADING) && !id0.equals(id)) { cacheStateMap.put(id0, Music.CACHE_WAIT); } } } } public static void clearFormerCachingNospace(long id) { if (cacheStateMap == null || !cacheStateMap.containsKey(id)) { return; } else { for (Long id0 : cacheStateMap.keySet()) { if (cacheStateMap.get(id0).equals(Music.CACHE_FAILURE_NOSPACE) && !id0.equals(id)) { cacheStateMap.put(id0, Music.CACHE_WAIT); } } } } /* * 手动同步数据 */ public static void updateLocalData(Context context) { String host = ""; if (WatchDog.currentHost != null) { host = WatchDog.currentHost.replaceAll("[.,/,:]", ""); } String dbname = WatchDog.currentUserId + host; SharedPreferences prefs = context.getSharedPreferences("runcount", 0); String datatag = prefs.getString(dbname + "*", "0"); if (!datatag.equals("0")) { Editor edi = prefs.edit(); edi.putString(dbname + "*", "false"); edi.commit(); } clearPurchasingMaps(); /* * Intent intent = new Intent(context, MainActivity.class); // * intent.addFlags(TRIM_MEMORY_BACKGROUND); * context.startActivity(intent); */ Intent loginIntent = new Intent(context, LoginActivity.class); Bundle bundle = new Bundle(); bundle.putInt(LoginActivity.BUNDLE_STATE, StateModel.STATE_SYNC); loginIntent.putExtras(bundle); context.startActivity(loginIntent); } /* 判断播放器是否可以进入 */ public static boolean checkMediaReady() { if (PlayerFragment.STOPPED.equals(WatchDog.currentState)) { // CustomToast.makeText(UpnpApp.context, // UpnpApp.context.getResources().getString(R.string.noMusicPlaying), // Toast.LENGTH_SHORT).show(); UpnpApp.mainHandler.showInfo(R.string.player_no_playingmusic_info); return false; } if (WatchDog.mediaOutOfService == true) { // 屏蔽提示“网络试听同步功能将在稍后开放” // CustomToast.makeText(UpnpApp.context, // WatchDog.mediaOutOfServiceReson, Toast.LENGTH_SHORT).show(); return false; } if (WatchDog.babyNotMine == true) { // CustomToast.makeText(UpnpApp.context, // UpnpApp.context.getResources().getString(R.string.playlistNotInitiated), // Toast.LENGTH_SHORT).show(); UpnpApp.mainHandler.showInfo(R.string.player_isused_info); return false; } return true; } /* * 清空状态为正在缓存中的数据 这是一个不甚严密的方法 * 更为严密的做法应是:将purchasingMaps与本地数据库中逐个校对后再精确删除部分或全部对象 */ public static void clearPurchasingMaps() { purchasingAlbums.clear(); purchasingPacks.clear(); purchasingMusics.clear(); } }