Professional Documents
Culture Documents
*
* Copyright (c) 2010-2014 EVE GROUP PTE. LTD.
*
*/
package org.rtspplayer.sample.activity;
import
import
import
import
import
import
import
import
import
import
java.io.File;
java.io.UnsupportedEncodingException;
java.lang.reflect.Field;
java.net.URLDecoder;
java.nio.ByteBuffer;
java.text.SimpleDateFormat;
java.util.Date;
java.util.List;
java.util.Timer;
java.util.TimerTask;
import
import
import
import
import
veg.mediaplayer.sdk.MediaPlayer;
veg.mediaplayer.sdk.MediaPlayer.MediaPlayerCallback;
veg.mediaplayer.sdk.MediaPlayer.PlayerNotifyCodes;
veg.mediaplayer.sdk.MediaPlayer.PlayerState;
veg.mediaplayer.sdk.MediaPlayer.Position;
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
org.rtspplayer.sample.R;
org.rtspplayer.sample.adapter.CamerasList;
org.rtspplayer.sample.adapter.FilesList;
org.rtspplayer.sample.adapter.GridAdapter;
org.rtspplayer.sample.adapter.GridAdapter.GridAdapterCallback;
org.rtspplayer.sample.adapter.StreamsList;
org.rtspplayer.sample.data.GridData;
org.rtspplayer.sample.database.DatabaseHelper;
org.rtspplayer.sample.dialog.AddChannelDialog;
org.rtspplayer.sample.dialog.AddChannelDialog.AddChannelDialogListener;
org.rtspplayer.sample.util.HttpClientFactory;
org.rtspplayer.sample.util.Logger;
org.rtspplayer.sample.util.M3U;
org.rtspplayer.sample.util.OnSwipeTouchListener;
org.rtspplayer.sample.util.SharedSettings;
org.rtspplayer.sample.util.SystemUiHider;
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
android.annotation.SuppressLint;
android.annotation.TargetApi;
android.app.ActionBar;
android.app.ActionBar.Tab;
android.app.ActionBar.TabListener;
android.app.Activity;
android.app.AlertDialog;
android.app.FragmentTransaction;
android.content.ContentResolver;
android.content.Context;
android.content.DialogInterface;
android.content.Intent;
android.content.pm.ActivityInfo;
android.content.res.Configuration;
android.database.ContentObserver;
android.database.Cursor;
android.graphics.Color;
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
android.graphics.Point;
android.graphics.drawable.ColorDrawable;
android.graphics.drawable.Drawable;
android.media.AudioManager;
android.net.Uri;
android.os.AsyncTask;
android.os.Build;
android.os.Bundle;
android.os.Environment;
android.os.Handler;
android.os.Message;
android.provider.MediaStore;
android.util.DisplayMetrics;
android.util.Log;
android.view.Display;
android.view.KeyEvent;
android.view.Menu;
android.view.MenuItem;
android.view.MotionEvent;
android.view.Surface;
android.view.View;
android.view.ViewTreeObserver;
android.view.Window;
android.view.View.OnClickListener;
android.view.ViewGroup;
android.view.WindowManager;
android.widget.AdapterView;
android.widget.FrameLayout;
android.widget.ImageButton;
android.widget.ImageView;
android.widget.ListView;
android.widget.ProgressBar;
android.widget.RelativeLayout;
android.widget.SeekBar;
android.widget.SeekBar.OnSeekBarChangeListener;
android.widget.TextView;
android.widget.Toast;
filesList
streamsList
camerasList
= null;
= null;
= null;
GridAdapter
currentList
= null;
player = null;
playerContainer = null;
progress_bar = null;
picStatusDisconneted = null;
picPreviewLeftTop = null;
picPreviewRightBottom = null;
viewListEmpty = null;
audio_manager = null;
RelativeLayout
layoutPlayerPanel = null;
RelativeLayout layoutPanelPlayerControl = null;
TextView
textPanelPlayerCaptionText = null;
TextView
textPanelPlayerCaptionDecoderType = null;
TextView
textPanelPlayerControlPosition = null;
TextView
textPanelPlayerControlDuration = null;
SeekBar
seekPanelPlayerControlSeekbar = null;
ImageButton
playerPanelControlLock = null;
ImageButton
playerPanelControlPrevStream = null;
ImageButton
playerPanelControlPlay = null;
ImageButton
playerPanelControlNextStream = null;
ImageButton
playerPanelControlScreen = null;
//private Timer
playerPanelControlTimer = null;
private PlayerPanelControlVisibleTask playerPanelControlTask = null;
public boolean
private FrameLayout
private ImageButton
public boolean
private Drawable[]
private Drawable[]
private String
isPlayerPanelVisible = false;
layoutPlayerLocked = null;
playerPanelControlLocked = null;
isLocked = false;
imgPlayPause = null;
imgAspects = null;
densityDpiString = "_mdpi";
//settings
//SharedSettings settings = null;
private boolean
firstRunned = true;
//
private boolean
private boolean
private String
isStartedByIntent = false;
isFileUrl = false;
urlFromIntent = "";
private boolean
private boolean
isLowResolutionDevice = false;
isReturnedFromPreference = false;
//
private int
aitForHidePlayerPanelControl;
private
private
private
private
currentPlayerPanelControlVisibleTime = w
int
int
int
int
//private int
//private int
previewWidth = 240;
previewHeight = 180;
previewRightMargin = 10;
previewBottomMargin = 10;
intPanelPlayerControlPosition = -1;
intPanelPlayerControlLastStreamPosition = -1
;
private boolean
private int
private int
//actionbar, tabs
private ActionBar
private Tab
= null;
private Tab
private Tab
private TabListener
private TabListener
private TabListener
private boolean
lockChangePosition = false;
lockedChangePosition = -1;
lockedLatestStreamPosition = -1;
bar
= null;
tab_files
tab_streams
tab_cameras
bar_files_tablistener = null;
bar_streams_tablistener = null;
bar_cameras_tablistener = null;
= null;
= null;
showPreview = false;
//private Menu
menuMain = null;
private Object waitOnMe = new Object();
//check file changes
boolean is_file_content_dirty = true;
class MyContentObserver extends ContentObserver {
public MyContentObserver(Handler handler) {
super(handler);
}
@Override
public void onChange(boolean selfChange) {
this.onChange(selfChange, null);
}
@Override
public void onChange(boolean selfChange, Uri uri) {
// do s.th.
// depending on the handler you might be on the UI
// thread, so be cautious!
//uri can be null
Log.i(TAG, "=onChange register file="+uri);
is_file_content_dirty = true;
}
}
private MyContentObserver file_observer_v = null;
private MyContentObserver file_observer_a = null;
private boolean isCurrentFilesList()
{
if (currentList == null)
return false;
return (currentList.getClass() == FilesList.class);
}
private boolean isCurrentStreamsList()
{
if (currentList == null)
return false;
return (currentList.getClass() == StreamsList.class);
}
private boolean isCurrentCamerasList()
{
if (currentList == null)
return false;
return (currentList.getClass() == CamerasList.class);
}
private boolean isSameListAsTabId()
{
int idTab = SharedSettings.getInstance().savedTabNumForSavedId;
return ((idTab == 0 && isCurrentCamerasList()) ||
(idTab == 1 && isCurrentStreamsList()) |
|
(idTab == 2 && isCurrent
FilesList()));
}
public String getFileNameByUri(Uri uri,Context context)
{
String fileName="unknown";//default fileName
Uri filePathUri = uri;
if (uri.getScheme().toString().compareTo("content")==0)
{
Cursor cursor = context.getContentResolver().query(uri,
null, null, null, null);
if (cursor.moveToFirst())
{
int column_index = cursor.getColumnIndexOrThrow(
MediaStore.Video.Media.DATA);//Instead of "MediaStore.Images.Media.DATA" can be
used "_data"
filePathUri = Uri.parse(cursor.getString(column_
index));
//fileName = filePathUri.getLastPathSegment().to
String();
// Log.d("1=getFileNameByUri "+filePathUri);
//fileName = filePathUri.toString()
fileName = filePathUri.getPath();
}
}
else if (uri.getScheme().compareTo("file")==0)
{
//fileName = filePathUri.getLastPathSegment().toStrin
g();
//fileName = filePathUri.toString();
fileName = filePathUri.getPath();
}
else
{
//fileName = fileName+"_"+filePathUri.getLastPathSegm
ent();
//fileName = filePathUri.toString();
fileName = filePathUri.getPath();
}
return fileName;
}
//
ViewTreeObserver.OnGlobalLayoutListener layoutListListener = new ViewTreeO
bserver.OnGlobalLayoutListener()
//
{
//
@Override
//
public void onGlobalLayout()
//
{
//
if (getActionBar() == null)
//
return;
//
//
int barHeight = getActionBar().getHeight();
//
FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) list_
docview.getLayoutParams();
//
// The list view top-margin should always match the action bar hei
ght
//
if (params.topMargin != barHeight)
//
{
//
params.topMargin = barHeight;
//
list_docview.setLayoutParams(params);
//
}
//
// The action bar doesn't update its height when hidden, so make t
op-margin zero
//
if (!getActionBar().isShowing())
//
{
//
params.topMargin = 0;
//
list_docview.setLayoutParams(params);
//
}
//
}
//
};
//
//
ViewTreeObserver.OnGlobalLayoutListener layoutEmptyListener = new ViewTree
Observer.OnGlobalLayoutListener()
//
{
//
@Override
//
public void onGlobalLayout()
//
{
//
if (getActionBar() == null)
//
return;
//
//
int barHeight = getActionBar().getHeight();
//
FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) viewL
istEmpty.getLayoutParams();
//
// The list view top-margin should always match the action bar hei
ght
//
if (params.topMargin != barHeight)
//
{
//
params.topMargin = barHeight;
//
viewListEmpty.setLayoutParams(params);
//
}
//
// The action bar doesn't update its height when hidden, so make t
op-margin zero
//
//
//
//
//
//
//
if (!getActionBar().isShowing())
{
params.topMargin = 0;
viewListEmpty.setLayoutParams(params);
}
}
};
return;
int barHeight = getActionBar().getHeight();
FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) viewLis
tEmpty.getLayoutParams();
float incf = 20f;
// The list view top-margin should always match the action bar heigh
t
if (getActionBar().isShowing() && params.topMargin != (barHeight + (
int)pxFromDp(incf)))
{
params.topMargin = barHeight + (int)pxFromDp(incf);
viewListEmpty.setLayoutParams(params);
}
// The action bar doesn't update its height when hidden, so make top
-margin zero
if (!getActionBar().isShowing() && params.topMargin != (int)pxFromDp
(incf))
{
params.topMargin = (int)pxFromDp(incf);
viewListEmpty.setLayoutParams(params);
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_ACTION_BAR_OVERLAY);
setContentView(R.layout.activity_main);
Log.v(TAG, "=>onCreate");
SharedSettings.getInstance(this).loadPrefSettings();
SharedSettings.getInstance().savePrefSettings();
showPreview = guardedByBuildversionBooleanValue(SharedSettings.g
etInstance().showPreview);
printResolutionDevice();
audio_manager = (AudioManager) getSystemService(Context.AUDIO_SE
RVICE);
progress_bar = (ProgressBar) findViewById(R.id.layout_hide_progr
ess);
playerContainer = (FrameLayout) findViewById(R.id.player_contain
er);
picStatusDisconneted = (ImageView) findViewById(R.id.pic_status_
disconnected);
picPreviewLeftTop = (ImageView) findViewById(R.id.pic_preview_le
fttop);
picPreviewRightBottom = (ImageView) findViewById(R.id.pic_previe
w_rightbottom);
viewListEmpty = (TextView) findViewById(R.id.textListEmpty);
layoutPlayerLocked = (FrameLayout) findViewById(R.id.layoutPlaye
rLocked);
playerPanelControlLocked = (ImageButton) findViewById(R.id.buttonPan
elPlayerControlLocked);
layoutPlayerPanel = (RelativeLayout) findViewById(R.id.layoutPla
yerPanel);
layoutPanelPlayerControl = (RelativeLayout)findViewById(R.id.lay
outPanelPlayerControl);
textPanelPlayerCaptionText = (TextView) findViewById(R.id.textPanelP
layerCaptionText);
textPanelPlayerCaptionDecoderType = (TextView) findViewById(R.id.tex
tPanelPlayerCaptionDecoderType);
textPanelPlayerControlPosition = (TextView) findViewById(R.id.te
xtPanelPlayerControlPosition);
textPanelPlayerControlDuration = (TextView) findViewById(R.id.te
xtPanelPlayerControlDuration);
playerPanelControlLock = (ImageButton) findViewById(R.id.buttonPanel
PlayerControlLock);
playerPanelControlPrevStream = (ImageButton) findViewById(R.id.butto
nPanelPlayerControlPrevious);
playerPanelControlPlay = (ImageButton) findViewById(R.id.buttonPanel
PlayerControlPlayPause);
playerPanelControlNextStream = (ImageButton) findViewById(R.id.butto
nPanelPlayerControlNext);
playerPanelControlScreen = (ImageButton) findViewById(R.id.buttonPan
elPlayerControlAspect);
list_docview = (ListView) findViewById(R.id.listDocuments);
player = (MediaPlayer)findViewById(R.id.playerView);
ViewTreeObserver observerList = list_docview.getViewTreeObserver();
observerList.addOnGlobalLayoutListener(layoutListListener);
ViewTreeObserver observerEmpty = viewListEmpty.getViewTreeObserver();
observerEmpty.addOnGlobalLayoutListener(layoutEmptyListener);
hider = SystemUiHider.getInstance(this, playerContainer, SystemUiHid
er.FLAG_HIDE_NAVIGATION);
hider.setup();
hider.setOnVisibilityChangeListener(new SystemUiHider.OnVisibilityCh
angeListener()
{
@Override
@TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
public void onVisibilityChange(boolean visible)
{
if (isLocked)
{
hider.hide();
return;
}
if (visible && !mPanelIsVisible)
{
updatePlayerPanelControl(true, isLocked);
}
if (!visible)
{
updatePlayerPanelControl(false, isLocked);
}
}
});
firstRunned = true;
mDbHelper = new DatabaseHelper(this);
filesList = new FilesList(this, mDbHelper, this);
is_file_content_dirty = true;
streamsList = new StreamsList(this, mDbHelper, this);
camerasList = new CamerasList(this, this, mDbHelper, this);
//mAddChannelDialog2 = new AddChannelDialog2(this, true);
//mAddChannelDialog2.requestWindowFeature(Window.FEATURE_NO_TITL
E);
mAddChannelDialog = new AddChannelDialog(this, Build.VERSION.SDK_INT >=
Build.VERSION_CODES.JELLY_BEAN);
mCloseIconsIsVisible = false;
//player.getThumbnailFromStream("Test url");
// for proper scaling
picStatusDisconneted.getDrawable().setLevel(5000);
picPreviewLeftTop.getDrawable().setLevel(5000);
picPreviewRightBottom.getDrawable().setLevel(5000);
playerPanelControlLock.getDrawable().setLevel(5000);
playerPanelControlPrevStream.getDrawable().setLevel(5000);
playerPanelControlPlay.getDrawable().setLevel(5000);
playerPanelControlNextStream.getDrawable().setLevel(5000);
playerPanelControlScreen.getDrawable().setLevel(5000);
playerPanelControlLocked.getDrawable().setLevel(5000);
picPreviewRightBottom.setVisibility(View.GONE);
seekPanelPlayerControlSeekbar = (SeekBar) findViewById(R.id.seek
PanelPlayerControlSeekbar);
seekPanelPlayerControlSeekbar.setOnTouchListener(new View.OnTouc
hListener()
{
@Override
public boolean onTouch(View view, MotionEvent motionEvent)
{
refreshPlayerPanelControlVisibleTimer();
if (player == null)
return true;
Position position = player.getLiveStreamPosition
();
if (position == null)
return true;
if (position.getStreamType() != 2)
{
long pos = position.getDuration() - 1000;
if (pos <= 0 || (pos > (60 * 60 * 12 * 1000)))
{
return true;
}
}
return false;
}
});
seekPanelPlayerControlSeekbar.setOnSeekBarChangeListener(new OnS
eekBarChangeListener()
{
@Override
public void onProgressChanged(SeekBar arg0, int arg1, boolean ar
g2)
{
if (player == null || !arg2)
return;
Position position = player.getLiveStreamPosition();
if (position == null)
return;
if (position.getStreamType() != 2)
{
long pos = position.getDuration() - 1000;
if (pos > 0 && (pos <= (60 * 60 * 12 * 1000)))
{
player.setStreamPosition(arg1);
refreshPlayerPanelControlVisibleTimer();
}
return;
}
lockChangePosition = true;
lockedChangePosition = arg1;
player.setLiveStreamPosition(position.getFirst() + locke
dChangePosition);
Log.i(TAG, "mediaLivePositionUpdate from onProgressChanged.");
mediaLivePositionUpdate();
//player.setStreamPosition(arg1);
refreshPlayerPanelControlVisibleTimer();
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
refreshPlayerPanelControlVisibleTimer();
}
});
list_docview.setAdapter(currentList);
//init database
updatePlayerPanelControl(false, isLocked);
//isLowResolutionDevice = isLowResolutionDevice();
//onInit();
list_docview.setOnTouchListener(new OnSwipeTouchListener(false)
{
public void touch()
{
Log.i(TAG, "=OnSwipeTouchListener touch");
}
public void swipeRight(int x, int y)
{
Log.i(TAG, "=OnSwipeTouchListener swipeRight");
if (isLocked)
return;
int sel_channel = list_docview.pointToPosition(x
, y);//chs_list.GetSelectedChannel();
if (sel_channel == AdapterView.INVALID_POSITION)
return;
GridData gd = null;
try
{
gd = (GridData)list_docview.getItemAtPos
ition(sel_channel);
}
catch(IndexOutOfBoundsException e)
{
}
if(gd == null)
return;
if(isModeFile())
{
//selectChannel(gd);
}
else
onDeleteChannel(gd);
}
public void swipeLeft(int x, int y)
{
Log.i(TAG, "=OnSwipeTouchListener swipeLeft");
if (isLocked)
return;
int sel_channel = list_docview.pointToPosition(x
, y);//chs_list.GetSelectedChannel();
if (sel_channel == AdapterView.INVALID_POSITION)
return;
GridData gd = null;
try
{
gd = (GridData)list_docview.getItemAtPos
ition(sel_channel);
}
catch(IndexOutOfBoundsException e)
{
}
if(gd == null)
return;
if(isModeFile())
{
//selectChannel(gd);
}
else
onDeleteChannel(gd);
}
public void swipeTop()
{
Log.i(TAG, "=OnSwipeTouchListener swipeTop");
}
public void swipeBottom()
{
Log.i(TAG, "=OnSwipeTouchListener swipeBottom");
}
public void doubleTap(int x, int y)
{
Log.i(TAG, "=OnSwipeTouchListener doubleTap x="+x+" y="+
y);
if (isLocked)
return;
if(isModeFile())
{
selectChannel(x,y);
}
else
onChannelEdit(x,y);
}
public void longPress(int x, int y)
{
Log.i(TAG, "=OnSwipeTouchListener longPress x="+x+" y="+
y);
if (isLocked)
return;
if(isModeFile())
{
selectChannel(x,y);
}
else
onChannelEdit(x,y);
}
if (SharedSettings.getInstance().rendererAspectR
atioMode == 4)
return;
if (mPanelIsVisible)
return;
audio_manager.adjustStreamVolume(AudioManager.STREAM_MUS
IC, AudioManager.ADJUST_LOWER, AudioManager.FLAG_SHOW_UI);
}
public void singleTap(int x, int y)
{
Log.i(TAG, "=OnSwipeTouchListener singleTap " + player.g
etState());
if (isLocked)
return;
refreshPlayerPanelControlVisibleTimer();
if(isStartedByIntent)
{
updatePlayerPanelControl(!isPlayerPanelV
isible, isLocked);
return;
}
if (mPanelIsVisible && player != null && player.
getState() == PlayerState.Closed)
{
return;
}
if (mPanelIsVisible)
{
hideControlPanelAndGrid();
mCloseIconsIsVisible = false;
currentList.notifyDataSetChanged();
}
else
{
updatePlayerPanelControl(!isPlayerPanelV
isible, isLocked);
if (SharedSettings.getInstance().AllowFullscreen
Mode)
hider.hide();
}
}
long t = 0;
int Growing = 0;
public void pinchMove(boolean isGrow)
{
if (isLocked)
return;
refreshPlayerPanelControlVisibleTimer();
if (SharedSettings.getInstance().rendererAspectR
atioMode != 4)
return;
Log.i(TAG, "=OnSwipeTouchListener pinchMove isG
row:" + isGrow);
if (isGrow)
{
Growing++;
if (Growing >=5) Growing =5;
}
else
{
Growing--;
if (Growing <=-5) Growing =-5;
}
Log.i(TAG, "=OnSwipeTouchListener pinchMove Grow
ing:" + Growing + " t:" + t + " t_diff:" + (System.nanoTime() - t));
if (t != 0 && (System.nanoTime() - t) > /*100000
0000*/10000000 /* 10 milliseconds */)
{
if (Growing >= 0)
{
if ((SharedSettings.getI
nstance().rendererAspectRatioZoomModePercent + 2) <= 300)
SharedSettings.g
etInstance().rendererAspectRatioZoomModePercent+=2;
else
SharedSettings.g
etInstance().rendererAspectRatioZoomModePercent=300;
}
else
{
if ((SharedSettings.getI
nstance().rendererAspectRatioZoomModePercent - 2) >= 25)
SharedSettings.g
etInstance().rendererAspectRatioZoomModePercent-=2;
else
SharedSettings.g
etInstance().rendererAspectRatioZoomModePercent=25;
}
//
SharedSettings.getInstance().ren
dererAspectRatioMoveModeX = -1;
//
SharedSettings.getInstance().ren
dererAspectRatioMoveModeY = -1;
player.getConfig().setAspectRati
oMoveModeX(SharedSettings.getInstance().rendererAspectRatioMoveModeX);
player.getConfig().setAspectRati
oMoveModeY(SharedSettings.getInstance().rendererAspectRatioMoveModeY);
player.getConfig().setAspectRati
oZoomModePercent(SharedSettings.getInstance().rendererAspectRatioZoomModePercent
);
player.getConfig().setAspectRati
oMode(SharedSettings.getInstance().rendererAspectRatioMode);
player.UpdateView();
Log.i(TAG, "=OnSwipeTouchListener pinchM
ove ZoomModePercent:" + SharedSettings.getInstance().rendererAspectRatioZoomMode
t1
last_x
last_y
diff_x
diff_y
max_x
max_y
_x
_y
_x_last
_y_last
=
=
=
=
=
=
=
=
=
-1;
-1;
-1;
-1;
-1;
-1;
=
=
-1;
-1;
0;
50;
// Center
50; // Center
-1;
-1;
-1;
-1;
-1;
-1;
}
public void touchMove(int x, int y)
{
if (isLocked)
return;
refreshPlayerPanelControlVisibleTimer();
if (SharedSettings.getInstance().rendererAspectR
atioMode != 4)
return;
if (-1 == max_x || -1 == max_y)
{
Display d = ((WindowMana
ger)getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
max_x = d.getWidth();
max_y = d.getHeight();
}
Log.i(TAG, "=OnSwipeTouchListener touchMove x:"
+ x + " y:" + y +" t:" + t1 + " t_diff:" + (System.nanoTime() - t1));
if (true /*t1 != 0 && (System.nanoTime() - t) >
/*1000000000*10000000 /* 10 milliseconds */)
{
_x = 100
;
if (_x < 0)
}
last_x = x;
_x = 0;
_y = 100
;
if (_y < 0)
}
last_y = y;
_y = 0;
_x;
_y;
}
else
if (t1 == 0)
{
t1 = System.nanoTime();
}
}
});
ft) {}
@Override
public void onTabReselected(Tab tab, FragmentTransaction
ft) {}
};
bar_streams_tablistener = new TabListener()
{
@Override
public void onTabSelected(Tab tab, FragmentTransaction f
t)
{
Log.v(TAG, "=onTabSelected3 tab=" + tab.getText(
));
if (list_docview == null)
return;
SharedSettings.getInstance().selectedTabNum = 1;
SharedSettings.getInstance().savePrefSettings();
if (currentList != null)
currentList.Close();
currentList = streamsList;
list_docview.setAdapter(currentList);
currentList.Refresh();
refreshListEmptyState();
invalidateOptionsMenu();
}
@Override
public void onTabUnselected(Tab tab, FragmentTransaction
ft){}
@Override
public void onTabReselected(Tab tab, FragmentTransaction
ft){}
};
bar_cameras_tablistener = new TabListener()
{
@Override
public void onTabSelected(Tab tab, FragmentTransaction f
t)
{
Log.v(TAG, "=onTabSelected4 tab=" + tab.getText(
));
if (list_docview == null)
return;
SharedSettings.getInstance().selectedTabNum = 0;
SharedSettings.getInstance().savePrefSettings();
if (currentList != null)
currentList.Close();
currentList = camerasList;
list_docview.setAdapter(currentList);
currentList.Refresh();
refreshListEmptyState();
invalidateOptionsMenu();
}
@Override
public void onTabUnselected(Tab tab, FragmentTransaction
ft){}
@Override
public void onTabReselected(Tab tab, FragmentTransaction
ft){}
};
tab_files = bar.newTab();
tab_streams = bar.newTab();
tab_cameras = bar.newTab();
bar.addTab(tab_cameras.setText(getResources().getString(R.string.tab_nam
e_cameras)).setTabListener(bar_cameras_tablistener), false);
bar.addTab(tab_streams.setText(getResources().getString(R.string.tab_nam
e_streams)).setTabListener(bar_streams_tablistener), false);
bar.addTab(tab_files.setText(getResources().getString(R.string.tab_name_
files)).setTabListener(bar_files_tablistener), false);
Log.v(TAG, "Selected tab on start: " + selectedTab);
if (selectedTab == 0)
bar.selectTab(tab_cameras);
if (selectedTab == 1)
bar.selectTab(tab_streams);
if (selectedTab == 2)
bar.selectTab(tab_files);
String mLocation = null;
long intentPosition = -1; // position passed in by intent (ms)
if (getIntent().getAction() != null && getIntent().getAction().equals(In
tent.ACTION_VIEW)) {
/* Started from external application */
if (getIntent().getData() != null
&& getIntent().getData().getScheme() != null
&& getIntent().getData().getScheme().equals("content")) {
if(getIntent().getData().getHost().equals("media") || getIntent(
).getData().getHost().equals("mms")) {
// Media URI
//Cursor cursor = managedQuery(getIntent().getData(), new St
ring[]{ MediaStore.Video.Media.DATA }, null, null, null);
//int column_index = cursor.getColumnIndexOrThrow(MediaStore
.Video.Media.DATA);
//
if (cursor.moveToFirst())
//
mLocation = LibVLC.PathToURI(cursor.getString(column_i
ndex));
//
Log.e(TAG, "mms and media");
} else if(getIntent().getData().getHost().equals("com.fsck.k9.at
tachmentprovider")
|| getIntent().getData().getHost().equals("gmail-ls")) {
// Mail-based apps - download the stream to a temporary file
and play it
Log.e(TAG, "URL: gmail-ls");
try {
/*
Cursor cursor = getContentResolver().query(getIntent().g
etData(), new String[]{MediaStore.MediaColumns.DISPLAY_NAME}, null, null, null);
cursor.moveToFirst();
String filename = cursor.getString(cursor.getColumnIndex
(MediaStore.MediaColumns.DISPLAY_NAME));
Log.i(TAG, "Getting file " + filename + " from content:/
/ URI");
InputStream is = getContentResolver().openInputStream(ge
tIntent().getData());
OutputStream os = new FileOutputStream(Environment.getEx
ternalStorageDirectory().getPath() + "/Download/" + filename);
byte[] buffer = new byte[1024];
int bytesRead = 0;
while((bytesRead = is.read(buffer)) >= 0) {
os.write(buffer, 0, bytesRead);
}
os.close();
is.close();
mLocation = LibVLC.PathToURI(Environment.getExternalStor
});
playerPanelControlPlay.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
refreshPlayerPanelControlVisibleTimer();
if (player == null || (player.getState() != Play
erState.Started && player.getState() != PlayerState.Paused ))
return;
switch (player.getState())
{
case Started:
player.Pause();
updatePlayerPanelControlButtons(
isLocked, false, SharedSettings.getInstance().rendererAspectRatioMode);
break;
case Paused:
player.Play();
updatePlayerPanelControlButtons(
isLocked, true, SharedSettings.getInstance().rendererAspectRatioMode);
break;
default:
break;
}
}
});
playerPanelControlNextStream.setOnClickListener(new OnClickListener(
)
{
@Override
public void onClick(View v)
{
refreshPlayerPanelControlVisibleTimer();
//selectPreviousChannel();
playPreviousChannelOrBack();
//Position position = player.getLiveStreamPosition();
//player.setLiveStreamPosition(position + 10000);
//player.setLiveStreamPosition(0x0);
}
});
playerPanelControlScreen.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
refreshPlayerPanelControlVisibleTimer();
if (player == null)
return;
SharedSettings sett = SharedSettings.getInstance
();
sett.rendererAspectRatioMode++;
if (sett.rendererAspectRatioMode > 4)
sett.rendererAspectRatioMode = 0;
SharedSettings.getInstance().savePrefSettings();
//player.UpdateView(guardedByOrientationIntValue
(sett.rendererEnableAspectRatio) == 1);
player.getConfig().setAspectRatioMode(sett.rende
rerAspectRatioMode);
player.getConfig().setAspectRatioZoomModePercent
(SharedSettings.getInstance().rendererAspectRatioZoomModePercent);
player.UpdateView();
updatePlayerPanelControlButtons(isLocked, (playe
r.getState() == PlayerState.Started), sett.rendererAspectRatioMode);
}
});
}
public boolean isModeFile()
{
return isCurrentFilesList();
}
public boolean isModeCameras()
{
return isCurrentCamerasList();
}
public boolean isPlayerBusy()
{
if(player != null && (player.getState() == PlayerState.Closing ||
player.getState(
) == PlayerState.Opening))
{
return true;
}
return false;
}
public boolean isPlayerStarted()
{
PlayerState sstate = (player == null)?PlayerState.Closed:player.
getState();
if(sstate == PlayerState.Opened ||
sstate == PlayerState.Opening ||
sstate == PlayerState.Paused ||
sstate == PlayerState.Started)
{
return true;
}
else
{
return false;
}
}
private String getRealPathFromURI(Uri contentUri)
{
selectChannel(currentList.getItem(id));
}
public void selectChannel(int x, int y)
{
int sel_channel = list_docview.pointToPosition(x, y);
if (sel_channel == AdapterView.INVALID_POSITION)
return;
if (mAddChannelDialog.isShowing() && !isStartedByIntent)
return;
try
{
GridData gd = (GridData)list_docview.getItemAtPosition(sel_chann
el);
selectChannel(gd);
}
catch(IndexOutOfBoundsException e)
{
}
}
public void selectChannel(GridData gd)
{
if (gd == null)
return;
Log.v(TAG, "=selectChannel gd=" + gd.url);
if (!currentList.SelectItem(gd))
return;
SharedSettings _set = SharedSettings.getInstance();
_set.setLongValueForKey(S_CUR_ID, gd.id);
_set.savedTabNumForSavedId = _set.selectedTabNum;
_set.savePrefSettings();
playerConnect(gd);
}
private void selectNextChannel()
{
if(isModeFile())
{
selectNextFile();
return;
}
SharedSettings _set = SharedSettings.getInstance();
long id = _set.getLongValueForKey(S_CUR_ID);
selectChannel(currentList.getNextSelectedItem(id));
}
private void playNextChannelOrBack()
{
if(isModeFile())
{
playNextFileOrBack();
return;
}
SharedSettings _set = SharedSettings.getInstance();
long id = _set.getLongValueForKey(S_CUR_ID);
GridData selGd = currentList.getNextSelectedItem(id);
if (selGd == null)
{
player.Close();
onBackPressed();
return;
}
selectChannel(selGd);
}
private void playNextChannelOrAgain()
{
if(isModeFile())
{
playNextFileOrAgain();
return;
}
}
private void playNextFileOrAgain()
{
Log.i(TAG, "=>playNextFileOrAgain=");
player.Close();
GridData selGd = currentList.getNextSelectedItem(-1);
if (selGd == null)
{
selGd = currentList.getFirstItem();
}
selectChannel(selGd);
}
private void selectPreviousChannel()
{
if(isModeFile())
{
selectPreviousFile();
return;
}
SharedSettings _set = SharedSettings.getInstance();
long id = _set.getLongValueForKey(S_CUR_ID);
selectChannel(currentList.getPreviousSelectedItem(id));
}
private void playPreviousChannelOrBack()
{
if(isModeFile())
{
playPreviousFileOrBack();
return;
}
SharedSettings _set = SharedSettings.getInstance();
long id = _set.getLongValueForKey(S_CUR_ID);
GridData selGd = currentList.getPreviousSelectedItem(id);
if (selGd == null)
{
player.Close();
onBackPressed();
return;
}
selectChannel(selGd);
}
private void selectNextFile()
{
player.Close();
selectChannel(currentList.getNextSelectedItem(-1));
}
private void playNextFileOrBack()
{
Log.i(TAG, "=>playNextFileOrBack=");
player.Close();
GridData selGd = currentList.getNextSelectedItem(-1);
if (selGd == null)
{
onBackPressed();
return;
}
selectChannel(selGd);
}
private void playPreviousFileOrBack()
{
Log.i(TAG, "=>playPreviousFileOrBack=");
player.Close();
GridData selGd = currentList.getPreviousSelectedItem(-1);
if (selGd == null)
{
onBackPressed();
return;
}
selectChannel(selGd);
}
private void selectPreviousFile()
{
player.Close();
selectChannel(currentList.getPreviousSelectedItem(-1));
}
public void playerConnect(GridData gd)
{
decoderType = sett.decoderType;
rendererType = sett.rendererType;
rendererEnableColorVideo = sett.rendererEnableColorVideo;
rendererAspectRatioMode = mPanelIsVisible ? 0 : sett.rendere
synchroEnable = sett.synchroEnable;
}
return super.dispatchKeyEvent(event);
};
@Override
public void onBackPressed()
{
Log.i(TAG, "=>onBackPressed isStartedByIntent=" + isStartedByInt
ent);
if (isLocked)
return;
if (!isStartedByIntent)
{
if (!mPanelIsVisible)
{
showControlPanelAndGrid();
}
else
{
if (currentList.GoBackFromSelectedItem())
return;
showExitDialog();
}
Log.i(TAG, "<=onBackPressed isStartedByIntent="+isStartedByInten
t);
return;
}
if(!currentList.isItemExistByUrl(urlFromIntent))
{
String sName = "External";
sName += " "+ new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"
).format(new Date());
addChannel(streamsList, sName, urlFromIntent, "", "", 1,
1, "");
}
finish();
}
private void addM3UToList(String url)
{
try
{
M3U m3u = new M3U();
m3u.getDataAndParse(url/*"http://watchmobiletv.net/tv_li
st.m3u"*/);
List<M3U.M3UChannel> list = m3u.getChannelList();
Log.i(TAG, "M3U size:" + list.size());
for(int i =0; i < list.size();i++)
{
String ext;
if (list.get(i).url.length() > 5)
ext = list.get(i).url.substring(
list.get(i).url.length()-5);
else
ext = list.get(i).url;
ext = ext.toLowerCase();
Log.i(TAG, "M3U " + ext + " " + i + "ur
l:" + list.get(i).url);
// Change on regular Expression
if ( !( (ext.indexOf(".3ga") != -1) ||
(ext.indexOf(".a52") !=
-1) ||
(ext.indexOf(".aac") !=
-1) ||
(ext.indexOf(".ac3") !=
-1) ||
(ext.indexOf(".adt") !=
-1) ||
(ext.indexOf(".adts") !=
-1) ||
(ext.indexOf(".aif") !=
-1) ||
(ext.indexOf(".aifc") !=
-1) ||
(ext.indexOf(".aifc") !=
-1) ||
(ext.indexOf(".aiff") !=
-1) ||
(ext.indexOf(".amr") !=
-1) ||
(ext.indexOf(".aob") !=
-1) ||
(ext.indexOf(".ape") !=
-1) ||
(ext.indexOf(".awb") !=
-1) ||
(ext.indexOf(".caf") !=
-1) ||
(ext.indexOf(".dts") !=
-1) ||
(ext.indexOf(".flac") !=
-1) ||
(ext.indexOf(".it") != 1) ||
(ext.indexOf(".m4a") !=
-1) ||
(ext.indexOf(".m4p") !=
-1) ||
(ext.indexOf(".mid") !=
-1) ||
(ext.indexOf(".mka") !=
-1) ||
(ext.indexOf(".mlp") !=
-1) ||
(ext.indexOf(".mod") !=
-1) ||
(ext.indexOf(".mpa") !=
-1) ||
(ext.indexOf(".mp1") !=
-1) ||
(ext.indexOf(".mp2") !=
-1) ||
(ext.indexOf(".mp3") !=
-1) ||
(ext.indexOf(".mpc") !=
-1) ||
(ext.indexOf(".mpga") !=
-1) ||
(ext.indexOf(".oga") !=
-1) ||
(ext.indexOf(".ogg") !=
-1) ||
(ext.indexOf(".oma") !=
-1) ||
(ext.indexOf(".opus") !=
-1) ||
(ext.indexOf(".ra") != 1) ||
(ext.indexOf(".ram") !=
-1) ||
(ext.indexOf(".rmi") !=
-1) ||
(ext.indexOf(".s3m") !=
-1) ||
(ext.indexOf(".spx") !=
-1) ||
(ext.indexOf(".tta") !=
-1) ||
(ext.indexOf(".voc") !=
-1) ||
(ext.indexOf(".vqf") !=
-1) ||
(ext.indexOf(".w64") !=
-1) ||
(ext.indexOf(".wav") !=
-1) ||
(ext.indexOf(".wma") !=
-1) ||
(ext.indexOf(".wv") != 1) ||
(ext.indexOf(".xa") != 1) ||
(ext.indexOf(".xm")!= -1
))
)
{
Log.i(TAG, "M3U Add chan
nel:" + ext + " " + i + " title:" + list.get(i).title + "url:" + list.get(i).url
);
addChannel(streamsList,l
ist.get(i).title, list.get(i).url, "", "", 1, 1, "");
}
}
}
catch (Exception e) {}
}
// calback addchannel dialog here
@Override
getMenuInflater().inflate(R.menu.actions, menu);
Log.i(TAG, "=onCreateOptionsMenu=");
MenuItem item = menu.findItem(R.id.action_add);
if(isModeFile())
{
item.setVisible(false);
item.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
}
else
{
item.setVisible(true);
item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
}
MenuItem item_play = menu.findItem(R.id.action_play);
MenuItem item_add = menu.findItem(R.id.action_add);
if(isPlayerStarted())
{
//playing
item_play.setIcon(R.drawable.pl_3);
}
else
{
//stopped
item_play.setIcon(R.drawable.pl_2);
}
if(isModeCameras())
{
item_add.setIcon(R.drawable.action_cameras_refresh);
}
else
{
item_add.setIcon(R.drawable.pl);
}
item_play.setVisible(m_cur_item != null);
return true;
}
@Override
public boolean onPrepareOptionsMenu(Menu menu)
{
if (isLocked)
return false;
if (!mPanelIsVisible)
return false;
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
if (isLocked)
return false;
if (!mPanelIsVisible)
return false;
int id = item.getItemId();
switch(id)
{
case R.id.action_play:
if(isPlayerStarted())
{
//stop
if(player != null)
{
player.Close();
invalidateOptionsMenu();
}
}
else
{
//run
selectChannel(m_cur_item);
if(player != null)
{
player.Play();
invalidateOptionsMenu();
}
}
return true;
case R.id.action_settings:
isReturnedFromPreference = true;
SharedSettings.getInstance().loadPrefSettings();
Intent intentSettings = new Intent(MainActivity.
this, PreferencesActivity.class);
startActivityForResult(intentSettings, 1);
return true;
case R.id.action_add:
onChannelAdd();
return true;
case R.id.action_help:
onHelp();
return true;
case R.id.action_send_log:
Logger log = new Logger(this);
log.sendLogByEmail("maxim@videoexpertsgroup.com"
, "", ""); // "maxim@videoexpertsgroup.com"
return true;
case R.id.action_exit:
showExitDialog();
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent
data)
{
if (requestCode == 1)
{
SharedSettings.getInstance().loadPrefSettings();
if (SharedSettings.getInstance().LockPlayerViewOrientati
on == 0)
setRequestedOrientation(ActivityInfo.SCREEN_ORIE
NTATION_UNSPECIFIED);
else
setRequestedOrientation(ActivityInfo.SCREEN_ORIE
NTATION_LANDSCAPE);
showPreview = guardedByBuildversionBooleanValue(SharedSe
ttings.getInstance().showPreview);
if (showPreview)
{
showPlayerView();
}
else
{
hidePlayerView();
}
}
}
@Override
public void onConfigurationChanged(Configuration newConfig)
{
super.onConfigurationChanged(newConfig);
boolean bPortrait = (getResources().getConfiguration().orientati
on == Configuration.ORIENTATION_PORTRAIT);
Log.v(TAG, "onConfigurationChanged() bPortrait=" + bPortrait);
if (player == null)
return;
if (mPanelIsVisible)
{
//player.UpdateView(false);
player.getConfig().setAspectRatioMode(0);
player.getConfig().setAspectRatioZoomModePercent(SharedS
ettings.getInstance().rendererAspectRatioZoomModePercent);
//player.UpdateView();
}
else
{
//
player.UpdateView(guardedByOrientationIntValue(SharedSet
tings.getInstance().rendererEnableAspectRatio) == 1);
Log.v(TAG, "onConfigurationChanged() rendererAspectRatio
Mode=" + SharedSettings.getInstance().rendererAspectRatioMode);
player.getConfig().setAspectRatioMode(SharedSettings.get
Instance().rendererAspectRatioMode);
player.getConfig().setAspectRatioZoomModePercent(SharedS
ettings.getInstance().rendererAspectRatioZoomModePercent);
//player.UpdateView();
}
}
//
//
{
//
Log.v(TAG, "onInit() ="+adapter_doc);
//
if(adapter_doc != null){
//
refreshListEmptyState();
//
//
if (adapter_doc.getState() == TabState.State_Streams)
//
{
//
// try refresh list
//
mGridList.clear();
//
Cursor c = mDbHelper.readChannelForPresentation();
//
while (c.moveToNext()) {
//
mGridList.add(new GridData(c.getString(c.getColumnIndexO
rThrow(ChannelListTable.CHANNEL_NAME)),
//
c.getString(c.getColumnIndexOrThrow(ChannelListT
able.CHANNEL_URL)),
//
c.getString(c.getColumnIndexOrThrow(ChannelListT
able.USER)),
//
c.getString(c.getColumnIndexOrThrow(ChannelListT
able.PASSWORD)),
//
c.getInt(c.getColumnIndexOrThrow(ChannelListTabl
e._ID /*CHANNEL_ID*/)),
//
c.getInt(c.getColumnIndexOrThrow(ChannelListTabl
e.CHANNEL_IMAGE_URL)),
//
c.getString(c.getColumnIndexOrThrow(ChannelListT
able.CHANNEL_IMAGE_URL_STR))));
//
}
//
//
adapter_doc.update_list(mGridList);
//
adapter_doc.notifyDataSetChanged();
//
}
////
if (adapter_doc.getState() == TabState.State_Files)
////
{
////
adapter_doc.update_list(mGridList);
////
adapter_doc.notifyDataSetChanged();
////
}
//
return;
//
}
//
//
mGridList.clear();
//
Cursor c = mDbHelper.readChannelForPresentation();
//
while (c.moveToNext()) {
//
mGridList.add(new GridData(c.getString(c.getColumnIndexOrThrow(Cha
nnelListTable.CHANNEL_NAME)),
//
c.getString(c.getColumnIndexOrThrow(ChannelListTable.CHANN
EL_URL)),
//
c.getString(c.getColumnIndexOrThrow(ChannelListTable.USER)
),
//
c.getString(c.getColumnIndexOrThrow(ChannelListTable.PASSW
ORD)),
//
c.getInt(c.getColumnIndexOrThrow(ChannelListTable._ID /*CH
ANNEL_ID*/)),
//
c.getInt(c.getColumnIndexOrThrow(ChannelListTable.CHANNEL_
IMAGE_URL)),
//
c.getString(c.getColumnIndexOrThrow(ChannelListTable.CHANN
EL_IMAGE_URL_STR))));
//
}
//
//
Log.v(TAG, "=mGridList size="+mGridList.size());
//
//
adapter_doc = new GridAdapter(MainActivity.this, mGridList);
//
//
//
//
//
//
//
//
list_docview.setAdapter(adapter_doc);
adapter_doc.set_sel(null);
adapter_doc.update_dir(null);
adapter_doc.setState(TabState.State_Files);
adapter_doc.notifyDataSetChanged();
refreshListEmptyState();
}
@Override
protected void onStart()
{
super.onStart();
if (isReturnedFromPreference)
{
isReturnedFromPreference = false;
return;
}
if (hider != null)
hider.showWithResize();
Log.i(TAG, "=>onStart " + isStartedByIntent);
currentList.Refresh();
refreshListEmptyState();
if(player != null)
player.onStart();
if (mAddChannelDialog.isShowing() && !isStartedByIntent)
{
mAddChannelDialog.refreshPlayer();
return;
}
player_state_error = PlayerStatesError.None;
if(!isStartedByIntent)
{
isLocked = false;
updatePlayerPanelControl(!isLocked, isLocked);
player.Close();
showControlPanelAndGrid();
if (!showPreview)
{
hidePlayerView();
}
if(currentList.getList().size() > 0)
{
SharedSettings _set = SharedSettings.getInstance();
long id = _set.getLongValueForKey(S_CUR_ID);
if (!firstRunned || id <= 0 || !isSameListAsTabId())
{
//selectCurrent();
return;
}
AlertDialog.Builder alertDialog = new AlertDialog.Builder(this);
alertDialog.setMessage(getResources().getString(R.string.dialog_
autostart_message));
alertDialog.setPositiveButton(getResources().getString(R.string.
dialog_autostart_yes), new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
selectCurrent();
firstRunned = false;
}
});
alertDialog.setNegativeButton(getResources().getString(R.string.
dialog_autostart_no), new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
firstRunned = false;
SharedSettings _set = SharedSettings.getInstance();
_set.setLongValueForKey(S_CUR_ID, -1); // clear selectio
n
_set.savedTabNumForSavedId = -1;
_set.savePrefSettings();
}
});
alertDialog.show();
}
}
}
@Override
protected void onStop()
{
Log.i(TAG, "<=onStop");
if(player != null)
player.onStop();
super.onStop();
if (isReturnedFromPreference)
return;
}
@Override
protected void onPause()
{
//unregister FileObserver
/*
Log.i(TAG, "=onPause unregister ContentObserver, file_observer="
+file_observer);
if(file_observer != null){
getContentResolver().unregisterContentObserver(file_observer);
}
file_observer = null;
*/
super.onPause();
}
@Override
protected void onResume()
{
super.onResume();
//register FileObserver
if(file_observer_v == null){
file_observer_v = new MyContentObserver(handler);
file_observer_a = new MyContentObserver(handler);
//File f = Environment.getExternalStoragePublicDirectory(Environ
ment.DIRECTORY_DCIM);
//File fp = f.getParentFile();
//Uri uri = Uri.fromParts("content", "file", fp.getAbsolutePath(
));
//Uri uri = Uri.fromFile(fp);
Uri uri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
Log.i(TAG, "=onResume register registerContentObserver video, ur
i="+uri);
getContentResolver().
registerContentObserver(
uri,
false,
file_observer_v);
uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
Log.i(TAG, "=onResume register registerContentObserver audio, ur
i="+uri);
getContentResolver().
registerContentObserver(
uri,
false,
file_observer_a);
}
if(is_file_content_dirty){
is_file_content_dirty = false;
if(isCurrentFilesList()){
currentList.Refresh();
}
}
}
@Override
protected void onDestroy()
{
//unregister FileObserver
Log.i(TAG, "=onDestroy unregister ContentObserver, file_observer
="+file_observer_v);
if(file_observer_v != null){
getContentResolver().unregisterContentObserver(file_observer_v);
}
if(file_observer_a != null){
getContentResolver().unregisterContentObserver(file_observer_a);
}
file_observer_v = null;
file_observer_a = null;
if (player != null)
{
player.Close();
player.onDestroy();
}
player = null;
if (currentList != null)
currentList.Close();
//
//
//
//
//
//
//
if (playerPanelControlTimer != null)
{
playerPanelControlTimer.cancel();
playerPanelControlTimer.purge();
playerPanelControlTimer = null;
Log.i(TAG, "Stop timer");
}
if (playerPanelControlTask != null)
{
playerPanelControlTask.cancel(true);
playerPanelControlTask = null;
Log.i(TAG, "Stop Task");
}
currentList.Load();
return;
}
mAddChannelDialog.IS_EDIT_ID = -1;
if (mAddChannelDialog.isAdded())
return;
else
{
//player.Close();
mAddChannelDialog.show(getFragmentManager(), "TAG");
mCloseIconsIsVisible = false;
adapter_doc.notifyDataSetChanged();
//
}
Log.v(TAG, "<=onChannelAdd");
}
void onChannelAdd(final String name, final String url)
{
if(isModeFile())
return;
Log.v(TAG, "=>onChannelAdd");
mAddChannelDialog.IS_EDIT_ID = -1;
if (mAddChannelDialog.isAdded())
return;
else
{
//player.Close();
mAddChannelDialog.setContentValues(name, url);
mAddChannelDialog.show(getFragmentManager(), "TAG");
mCloseIconsIsVisible = false;
adapter_doc.notifyDataSetChanged();
//
}
Log.v(TAG, "<=onChannelAdd");
}
void onChannelEdit(int x, int y)
{
int sel_channel = list_docview.pointToPosition(x, y);//chs_list.
GetSelectedChannel();
if (sel_channel == AdapterView.INVALID_POSITION)
return;
try
{
GridData gd = (GridData)list_docview.getItemAtPosition(sel_chann
el);
onChannelEdit(gd);
}
catch(IndexOutOfBoundsException e)
{
}
}
void onChannelEdit(GridData gd)
{
if(isModeFile())
return;
if(gd == null)
return;
mAddChannelDialog.IS_EDIT_ID = gd.id;
if (mAddChannelDialog.isAdded())
return;
else
{
//player.Close();
mAddChannelDialog.setContentValues(gd.name, gd.url);
mAddChannelDialog.show(getFragmentManager(), "TAG");
mCloseIconsIsVisible = false;
adapter_doc.notifyDataSetChanged();
//
}
}
//
//
//
//
//
//
//
//
//
void onChannelDelete()
{
if (mGridList == null || mGridList.size() <= 0)
return;
Log.v(TAG, "=>onChannelDelete");
mCloseIconsIsVisible = !mCloseIconsIsVisible;
adapter_doc.notifyDataSetChanged();
}
void onHelp()
{
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(getStri
ng(R.string.help_url)));
intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY | Intent.FLAG_AC
TIVITY_CLEAR_WHEN_TASK_RESET);
startActivity(intent);
}
// @SuppressLint("NewApi")
private void showControlPanelAndGrid()
{
mPanelIsVisible = true;
if (currentList != null)
currentList.StartThumbnailUpdate();
updatePlayerPanelControl(false, isLocked);
FrameLayout.LayoutParams lpc = (FrameLayout.LayoutParams) playerContaine
r.getLayoutParams();
final float scale = getResources().getDisplayMetrics().density;
int pixelsW = (int) (previewWidth * scale + 0.5f);
int pixelsH = (int) (previewHeight * scale + 0.5f);
Log.v(TAG, "=>showControlPanelAndGrid "+pixelsW+"x"+pixelsH);
lpc.width = pixelsW;
lpc.height = pixelsH;
if (player != null)
{
player.backgroundColor(Color.BLACK);
//
player.UpdateView(guardedByOrientationIntValue(SharedSettings.ge
tInstance().rendererEnableAspectRatio) == 1);
player.getConfig().setAspectRatioMode(SharedSettings.get
Instance().rendererAspectRatioMode);
player.getConfig().setAspectRatioZoomModePercent(SharedS
ettings.getInstance().rendererAspectRatioZoomModePercent);
player.UpdateView();
}
picPreviewLeftTop.setVisibility(View.GONE);
picPreviewRightBottom.setVisibility(View.GONE);
list_docview.setVisibility(View.GONE);
if (getActionBar() != null)
getActionBar().hide();
if (SharedSettings.getInstance().AllowFullscreenMode)
hider.hide();
FrameLayout.LayoutParams lpc = (FrameLayout.LayoutParams) playerContaine
r.getLayoutParams();
lpc.width = ViewGroup.LayoutParams.MATCH_PARENT;
lpc.height = ViewGroup.LayoutParams.MATCH_PARENT;
lpc.rightMargin = 0;
lpc.bottomMargin = 0;
playerContainer.setLayoutParams(lpc);
// remove border
playerContainer.setPadding(0, 0, 0, 0);
playerContainer.setBackgroundResource(android.R.color.transparen
t);;
player.setKeepScreenOn(true);
invalidateOptionsMenu();
if (!showPreview)
showPlayerView();
}
public void addChannel(String name, String url, String user, String password
, int channel_id, int preview, String image_file)
{
currentList.AddItem(name, url, user, password, channel_id, preview, imag
e_file);
refreshListEmptyState();
}
public void addChannel(final GridAdapter list, String name, String url, Stri
ng user, String password, int channel_id, int preview, String image_file)
{
if (list == null)
return;
list.AddItem(name, url, user, password, channel_id, preview, image_file)
;
refreshListEmptyState();
}
public void updateChannel(long id, String name, String url, String user, Str
ing password, int channel_id, int preview, String image_file)
{
//find
currentList.UpdateItem(id, name, url, user, password, channel_id, previe
w, image_file);
}
public void onDeleteChannel(final GridData gd)
{
if(isModeFile())
return;
AlertDialog.Builder alertDialog = new AlertDialog.Builder(MainAc
tivity.this);
String sMessage = getResources().getString(R.string.dialog_delete_channe
l) + "'" + gd.name + "'?";
alertDialog.setMessage(sMessage);
alertDialog.setPositiveButton(getResources().getString(R.string.dialog_e
xit_yes), new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int which)
{
deleteChannel(gd.id);
}
});
alertDialog.setNegativeButton(getResources().getString(R.string.dialog_e
xit_no), new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int which)
{
dialog.cancel();
}
});
alertDialog.show();
return;
}
public void deleteChannel(long id)
{
SharedSettings _set = SharedSettings.getInstance();
long saved_id = _set.getLongValueForKey(S_CUR_ID);
if (saved_id == id)
{
_set.setLongValueForKey(S_CUR_ID, -1);
_set.savedTabNumForSavedId = -1;
_set.savePrefSettings();
}
currentList.DeleteItem(id);
refreshListEmptyState();
if(m_cur_item != null && m_cur_item.id == id)
{
player.Close();
}
}
public boolean isUrlExist(final String url)
{
return currentList.isItemExistByUrl(url);
}
private int mOldMsg = 0;
private Handler handler = new Handler()
{
String strText = "Status:";
@Override
public void handleMessage(Message msg)
{
PlayerNotifyCodes status = (PlayerNotifyCodes) msg.obj;
Log.e(TAG, "Notify: " + status);
switch (status)
{
case CP_CONNECT_STARTING:
//player_state = PlayerStates.Busy;
player_state_error = PlayerStatesError.None;
showProgressView();
break;
case VRP_NEED_SURFACE:
//player_state = PlayerStates.Busy;
//showVideoView();
//synchronized (waitOnMe) { waitOnMe.notifyAll()
; }
break;
case PLP_PLAY_SUCCESSFUL:
//player_state = PlayerStates.ReadyForUse;
player_state_error = PlayerStatesError.None;
hideProgressView();
updatePlayerPanelControlButtons(isLocked
, true, SharedSettings.getInstance().rendererAspectRatioMode);
break;
case PLP_CLOSE_STARTING:
//player_state = PlayerStates.Busy;
break;
case PLP_CLOSE_SUCCESSFUL:
//player_state = PlayerStates.ReadyForUse;
hideProgressView();
updatePlayerPanelControlButtons(isLocked
, false, SharedSettings.getInstance().rendererAspectRatioMode);
System.gc();
break;
case PLP_CLOSE_FAILED:
//player_state = PlayerStates.ReadyForUse;
hideProgressView();
break;
case CP_CONNECT_FAILED:
//player_state = PlayerStates.ReadyForUse;
player_state_error = PlayerStatesError.Disconnec
ted;
hideProgressView();
break;
case PLP_BUILD_FAILED:
//player_state = PlayerStates.ReadyForUse;
player_state_error = PlayerStatesError.Disconnec
ted;
hideProgressView();
break;
case PLP_PLAY_FAILED:
//player_state = PlayerStates.ReadyForUse;
player_state_error = PlayerStatesError.Disconnec
ted;
hideProgressView();
break;
case PLP_ERROR:
//player_state = PlayerStates.ReadyForUse;
player_state_error = PlayerStatesError.Disconnec
ted;
hideProgressView();
break;
case CP_INTERRUPTED:
//player_state = PlayerStates.ReadyForUse;
//player_state_error = PlayerStatesError.Disconn
ected;
hideProgressView();
break;
//case CONTENT_PROVIDER_ERROR_DISCONNECTED:
case CP_STOPPED:
case VDP_STOPPED:
case VRP_STOPPED:
case ADP_STOPPED:
case ARP_STOPPED:
if (!isPlayerBusy())
{
//stopProgressTask();
//player_state = PlayerStates.Busy;
Log.e(TAG, "AUDIO_RENDERER_PROVIDER_STOP
PED_THREAD Close.");
player.Close();
}
break;
case PLP_EOS:
Log.e(TAG, "PLP_EOS: " + isFileUrl + ", " + play
er.getState());
if ((isFileUrl || isModeFile()) && !isPlayerBusy() &&
player_s
tate_error != PlayerStatesError.Eos)
{
player_state_error = PlayerStatesError.Eos;
if (isStartedByIntent)
{
player.Close();
onBackPressed();
return;
}
if (!mPanelIsVisible)
{
if (SharedSettings.getInstance().AllowPl
ayStreamsSequentially)
playNextChannelOrBack();
//playNextChannelOrAgain();
else
{
player.Close();
onBackPressed();
}
return;
}
Log.e(TAG, "CONTENT_PROVIDER_ERROR_DISCO
NNECTED Close.");
player.Close();
}
break;
case CP_ERROR_DISCONNECTED:
if (!isPlayerBusy())
{
if (!isFileUrl)
{
//player_state = PlayerStates.Busy;
Log.e(TAG, "CONTENT_PROVIDER_ERROR_DISCO
NNECTED Close.");
player.Close();
playerConnect(m_cur_item);
Log.e(TAG, "Reconnecting: " + player.get
Config().getDataReceiveTimeout());
}
}
break;
default:
}
strText += " "+status;
}
};
@Override
public int OnReceiveData(ByteBuffer buffer, int size, long pts)
{
//Log.i(TAG, "OnReceiveData size: " + size + ", pts: " + pts);
return 0;
}
@Override
public int Status(int arg0)
{
Log.i(TAG, "=Status arg="+arg0);
PlayerNotifyCodes status = PlayerNotifyCodes.forValue(arg0);
if (handler == null || status == null)
return 0;
if (player != null)
Log.i(TAG, "Current state:" + player.getState());
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
switch (status)
{
// for synchronus process
//case PLAY_SUCCESSFUL:
case VRP_NEED_SURFACE:
synchronized (waitOnMe)
{
Message msg = new Message();
msg.obj = status;
handler.sendMessage(msg);
try
{
waitOnMe.wait();
}
catch (InterruptedException e) {}
}
break;
case CP_CONNECT_FAILED:
case PLP_BUILD_FAILED:
case PLP_PLAY_FAILED:
case PLP_ERROR:
case CP_STOPPED:
case VDP_STOPPED:
case VRP_STOPPED:
case ADP_STOPPED:
case ARP_STOPPED:
case CP_ERROR_DISCONNECTED:
{
player_state_error = PlayerStatesError.Disconnected;
Message msg = new Message();
msg.obj = status;
msg.what = 1;
handler.removeMessages(mOldMsg);
mOldMsg = msg.what;
handler.sendMessage(msg);
break;
}
// for asynchronus process
default:
{
Message msg = new Message();
msg.obj = status;
msg.what = 1;
handler.removeMessages(mOldMsg);
mOldMsg = msg.what;
handler.sendMessage(msg);
}
}
return 0;
}
private void updatePlayerPanelControl(final boolean visible, final boole
an locked)
{
if (!visible)
{
isPlayerPanelVisible = false;
if (layoutPlayerPanel.getVisibility() == View.VISIBLE)
layoutPlayerPanel.setVisibility(View.GONE);
//
//
//
//
//
//
//
if (playerPanelControlTimer != null)
{
playerPanelControlTimer.cancel();
playerPanelControlTimer.purge();
playerPanelControlTimer = null;
Log.i(TAG, "Stop timer");
}
if (playerPanelControlTask != null)
{
playerPanelControlTask.cancel(true);
playerPanelControlTask = null;
Log.i(TAG, "Stop Task");
}
lockPlayer(locked);
return;
}
lockPlayer(false);
isPlayerPanelVisible = true;
if (layoutPlayerPanel.getVisibility() != View.VISIBLE)
layoutPlayerPanel.setVisibility(View.VISIBLE);
if (player == null)
return;
long saved_id = SharedSettings.getInstance().getLongValueForKey(S_CUR_ID
);
GridData gdf = currentList.getItem(saved_id);
if (isModeFile())
gdf = currentList.getSelectedItem();
textPanelPlayerCaptionText.setText(gdf != null ? gdf.name : "");
String decoderType = player.IsHardwareDecoding() ? getResources().ge
tString(R.string.player_control_decoder_hw) :
getResources().getString(R.string.player_control_decoder_sw);
textPanelPlayerCaptionDecoderType.setText(decoderType);
refreshPlayerPanelControlVisibleTimer();
Log.i(TAG, "mediaLivePositionUpdate from updatePlayerPanelControl.");
//mediaLivePositionUpdate();
//mediaPositionTimerMethod();
//
//
//
//
//
//
//
//
//
//
//
;
executeAsyncTask(playerPanelControlTask, "");
}
if (SharedSettings.getInstance().AllowFullscreenMode)
hider.resize();
}
public void lockOrientation()
{
Display display = ((WindowManager) getSystemService(Context.WINDOW_S
ERVICE)).getDefaultDisplay();
int rotation = display.getRotation();
int tempOrientation = getResources().getConfiguration().orientation;
int orientation = 0;
switch(tempOrientation)
{
case Configuration.ORIENTATION_LANDSCAPE:
if(rotation == Surface.ROTATION_0 || rotation == Surface
.ROTATION_90)
orientation = ActivityInfo.SCREEN_ORIENTATION_LANDSC
APE;
else
orientation = ActivityInfo.SCREEN_ORIENTATION_REVERS
E_LANDSCAPE;
break;
case Configuration.ORIENTATION_PORTRAIT:
if(rotation == Surface.ROTATION_0 || rotation == Surface
.ROTATION_270)
orientation = ActivityInfo.SCREEN_ORIENTATION_PORTRA
IT;
else
orientation = ActivityInfo.SCREEN_ORIENTATION_REVERS
E_PORTRAIT;
}
setRequestedOrientation(orientation);
}
private void lockPlayer(final boolean lock)
{
if (hider != null)
hider.lock(lock);
if (lock)
{
if (layoutPlayerLocked.getVisibility() != View.VISIBLE)
layoutPlayerLocked.setVisibility(View.VISIBLE);
lockOrientation();
}
else
{
if (layoutPlayerLocked.getVisibility() == View.VISIBLE)
layoutPlayerLocked.setVisibility(View.GONE);
if (SharedSettings.getInstance().LockPlayerViewOrientati
on == 0)
setRequestedOrientation(ActivityInfo.SCREEN_ORIE
NTATION_UNSPECIFIED);
else
setRequestedOrientation(ActivityInfo.SCREEN_ORIE
NTATION_LANDSCAPE);
}
}
private void refreshPlayerPanelControlVisibleTimer()
{
//currentPlayerPanelControlVisibleTime = waitForHidePlayerPanelContr
ol;
if (playerPanelControlTask != null)
playerPanelControlTask.restartTimer();
}
private void updatePlayerPanelControlButtons(final boolean lock, final b
oolean pause, int aspect_ratio_mode)
{
if (player == null)
return;
String decoderType = player.IsHardwareDecoding() ? getResources().ge
tString(R.string.player_control_decoder_hw) :
getResources().getString(R.string.player_control
_decoder_sw);
textPanelPlayerCaptionDecoderType.setText(decoderType);
if (pause)
playerPanelControlPlay.setImageDrawable(imgPlayPause[1])
;
else
playerPanelControlPlay.setImageDrawable(imgPlayPause[0])
;
playerPanelControlPlay.getDrawable().setLevel(5000);
aspect_ratio_mode++;
if (aspect_ratio_mode > 4)
aspect_ratio_mode = 0;
playerPanelControlScreen.setImageDrawable(imgAspects[aspect_rati
o_mode]);
playerPanelControlScreen.getDrawable().setLevel(5000);
invalidateOptionsMenu();
}
synchronized private void mediaPositionUpdate()
{
Log.i(TAG, "=mediaPositionUpdate= ");
if (player == null)
return;
//if (currentPlayerPanelControlVisibleTime == 0)
if (playerPanelControlTask == null || playerPanelControlTask.get
Timer() <= 0)
{
if (SharedSettings.getInstance().AllowFullscreenMode && !mPanelI
sVisible)
hider.hide();
updatePlayerPanelControl(false, isLocked);
return;
}
//currentPlayerPanelControlVisibleTime--;
long duration = player.getStreamDuration();
long position = player.getStreamPosition();
Log.i(TAG, "=mediaPositionUpdate= " + playerPanelControlTask.get
Timer() + ", " + position + ", " + duration);
if (player != null && (player.getState() != PlayerState.Started
&&
player.g
etState() != PlayerState.Opened &&
player.getState() != PlayerState.Stopped &&
player.getState() != PlayerState.Paused))
duration = 0;
if (duration > 0) duration -= 1000;
if (duration <= 0 || (duration > (60 * 60 * 12 * 1000))) // guar
d for 12 hours
{
position = 0;
duration = (60 * 60 * 12 * 1000);
}
if (position > duration)
position = duration;
Log.i(TAG, "=mediaPositionUpdate= " + position + ", " + duration
);
if ((int)position != seekPanelPlayerControlSeekbar.getProgress()
)
{
textPanelPlayerControlPosition.setText(convertStreamPositionToTi
me(position/1000));
seekPanelPlayerControlSeekbar.setProgress((int)position); // Set
duration = pos.getDuration();
first = pos.getFirst();
current = player.getRenderPosition();//pos.getCurrent();
last = pos.getLast();
lockedLatestStreamPosition != (i
nt)stream_position)
{
lockChangePosition = false;
lockedLatestStreamPosition = -1;
}
if (lockChangePosition)
current = lockedChangePosition;
if (player != null && (player.getState() != PlayerState.Started
&&
player.g
etState() != PlayerState.Opened &&
player.getState() != PlayerState.Stopped &&
player.getState() != PlayerState.Paused))
duration = 0;
//
tionToTime2(first));
//
tionToTime2(last));
textPanelPlayerControlPosition.setText(convertStreamPosi
textPanelPlayerControlDuration.setText(convertStreamPosi
@Override
public void run()
{
Log.i(TAG, "=mediaPositionTimerMethod= ");
mediaPositionUpdate();
}
});
}
private void mediaLivePositionTimerMethod()
{
Log.i(TAG, "=mediaLivePositionTimerMethod= ");
runOnUiThread(new Runnable()
{
@Override
public void run()
{
mediaLivePositionUpdate();
}
});
}
private String convertStreamPositionToTime(long Time)
{
long tns, thh, tmm, tss;
tns = Time;
thh = tns / 3600;
tmm = (tns % 3600) / 60;
tss = (tns % 60);
return String.format("%02d:%02d:%02d", thh, tmm, tss);
}
private String convertStreamPositionToTime2(long Time)
{
long tns, thh, tmm, tss;
tns = Time;
thh = tns / 3600;
tmm = (tns % 3600) / 60;
tss = (tns % 60);
return String.format("%02d:%02d:%02d", thh, tmm, tss);
}
//
//
//
//
//
//
//
layerStatesError.Disconnected));
picStatusDisconneted.setVisibility(isVisibleDisconnect ? View.VI
SIBLE : View.INVISIBLE);
Log.i(TAG, "=hideProgressView= " + player_state_error);
}
private void showProgressView()
{
progress_bar.setVisibility(View.VISIBLE);
picStatusDisconneted.setVisibility(View.INVISIBLE);
invalidateOptionsMenu();
Log.i(TAG, "=showProgressView= " + player_state_error);
}
private void hidePlayerView()
{
if (player == null)
return;
//playerContainer.setAlpha(0.0f);
playerContainer.setVisibility(View.GONE);
}
private void showPlayerView()
{
if (player == null)
return;
//playerContainer.setAlpha(1.0f);
playerContainer.setVisibility(View.VISIBLE);
}
private void refreshListEmptyState()
{
if (currentList == null)
return;
Log.i(TAG, "=refreshListEmptyState= " + currentList.isEmpty());
if (!currentList.isEmpty() || isModeFile())
{
if (viewListEmpty.getVisibility() != View.INVISIBLE)
viewListEmpty.setVisibility(View.INVISIBLE);
if (list_docview.getVisibility() != View.VISIBLE)
list_docview.setVisibility(View.VISIBLE);
}
else
{
if (isCurrentCamerasList())
viewListEmpty.setText(getResources().getString(R
.string.main_cameras_empty_list));
else
viewListEmpty.setText(getResources().getString(R
.string.main_streams_empty_list));
if (list_docview.getVisibility() != View.INVISIBLE)
list_docview.setVisibility(View.INVISIBLE);
if (viewListEmpty.getVisibility() != View.VISIBLE)
viewListEmpty.setVisibility(View.VISIBLE);
mCloseIconsIsVisible = false;
invalidateOptionsMenu();
}
}
private boolean printResolutionDevice()
{
boolean isTab = false;
int screenSize = (getResources().getConfiguration().screenLayout
&
Configuration.SCREENLAYOUT_SIZE_MASK);
switch(screenSize)
{
case Configuration.SCREENLAYOUT_SIZE_LARGE:
Log.i(TAG, "Density: Large screen");
isTab = true;
break;
case Configuration.SCREENLAYOUT_SIZE_NORMAL:
Log.i(TAG, "Density: Normal screen");
break;
case Configuration.SCREENLAYOUT_SIZE_SMALL:
Log.i(TAG, "Density: Small screen");
break;
case Configuration.SCREENLAYOUT_SIZE_XLARGE:
Log.i(TAG, "Density: XLarge screen");
isTab = true;
break;
default:
Log.i(TAG, "Density: Screen size is neither large, norma
l or small " + screenSize);
}
int density= getResources().getDisplayMetrics().densityDpi;
switch(density)
{
case DisplayMetrics.DENSITY_LOW:
Log.i(TAG, "Density: LDPI");
densityDpiString = "_ldpi";
break;
case DisplayMetrics.DENSITY_MEDIUM:
Log.i(TAG, "Density: MDPI");
densityDpiString = "_mdpi";
break;
case DisplayMetrics.DENSITY_HIGH:
Log.i(TAG, "Density: HDPI");
densityDpiString = "_hdpi";
break;
case DisplayMetrics.DENSITY_XHIGH:
Log.i(TAG, "Density: XHDPI");
densityDpiString = "_xhdpi";
break;
case DisplayMetrics.DENSITY_XXHIGH:
Log.i(TAG, "Density: XXHIGH");
densityDpiString = "_xxhdpi";
break;
case DisplayMetrics.DENSITY_XXXHIGH:
Log.i(TAG, "Density: XXXHIGH");
densityDpiString = "_xxhdpi";
break;
case DisplayMetrics.DENSITY_TV:
try
{
do
{
//Log.i(TAG, "doInBackground thread before " + nAttempt)
;
synchronized ( uiRunnable )
{
runOnUiThread(uiRunnable);
try
{
uiRunnable.wait();
}
catch ( InterruptedException e ) { stop = true; }
}
if (stop) break;
Thread.sleep(1000);
nAttempt--;
//Log.i(TAG, "doInBackground thread after " + nAttempt);
}
while(nAttempt > 0 && !isCancelled());
}
catch (Exception e)
{
}
clearTimer();
synchronized ( uiRunnable )
{
runOnUiThread(uiRunnable);
try
{
uiRunnable.wait();
}
catch ( InterruptedException e ) { stop = true; }
}
//mediaLivePositionTimerMethod();
return true;
}
@Override
protected void onPostExecute(Boolean result)
{
super.onPostExecute(result);
playerPanelControlTask = null;
}
@Override
protected void onCancelled()
{
super.onCancelled();
playerPanelControlTask = null;
}
}
static public <T> void executeAsyncTask(AsyncTask<T, ?, ?> task, T... params
)
{