package com.iwedia.gui.multimedia.dlna.renderer.controller; import android.app.Activity; import android.content.DialogInterface; import android.content.res.TypedArray; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Color; import android.os.AsyncTask; import android.os.Handler; import android.os.RemoteException; import android.util.Log; import android.view.Gravity; import android.view.View; import android.view.View.OnClickListener; import android.view.View.OnFocusChangeListener; import android.view.ViewGroup.LayoutParams; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ScrollView; import android.widget.Toast; import com.iwedia.gui.MainActivity; import com.iwedia.gui.R; import com.iwedia.gui.components.A4TVButton; import com.iwedia.gui.components.A4TVDialog; import com.iwedia.gui.components.A4TVMultimediaController; import com.iwedia.gui.components.A4TVMultimediaController.ControlProvider; import com.iwedia.gui.components.A4TVProgressDialog; import com.iwedia.gui.components.A4TVTextView; import com.iwedia.gui.listeners.MainKeyListener; import com.iwedia.gui.multimedia.MultimediaGlobal; import com.iwedia.gui.multimedia.MultimediaHandler; import com.iwedia.gui.multimedia.MultimediaShowHandler; import com.iwedia.gui.multimedia.controller.MediaController; import com.iwedia.gui.osd.CheckServiceType; import com.iwedia.gui.osd.OSDGlobal; import com.iwedia.gui.osd.OSDHandlerHelper; import java.io.IOException; import java.io.InputStream; import java.net.MalformedURLException; import java.net.URL; /** * Handle renderer events * * @author Milos Milanovic */ public class RendererController implements MultimediaGlobal, OSDGlobal { private final String TAG = "RendererController"; private static final int ASYNC_PLAY = 0; private static final int ASYNC_STOP = 1; private Activity mActivity = null; private MediaController mMediaController = null; private MultimediaHandler mMultimediaHandler = null; /** Progress dialog for loading data from DLNA controller */ private A4TVProgressDialog mProgressDialog = null; private WaitForPlayback asyncWaitForPlayback = null; private static boolean flagOnCompletition = false; private boolean flagWaitForPlayback = false; private int mRendererState = RENDERER_STATE_STOP; private String mFilePath = ""; private String mFriendlyName = ""; private String mMime = ""; private A4TVDialog dialogContext; private CheckServiceType checkServiceType; public RendererController(Activity activity, MediaController mediaController) { this.mActivity = activity; this.mMediaController = mediaController; initProgressDialog(); } public void play(final String filePath, final String friendlyName, final String mime) { this.mFilePath = filePath; this.mFriendlyName = friendlyName; this.mMime = mime; flagOnCompletition = false; Log.d(TAG, "EXTENSIONS_VIDEO: " + EXTENSIONS_VIDEO.contains(mime)); if (EXTENSIONS_VIDEO.contains(mime)) { showDialog(true); } else { showDialog(false); } } public boolean pause() { if (mRendererState == RENDERER_STATE_PLAY) { Log.d(TAG, "Pause -> MAIN"); try { mMediaController.pause(); MainActivity.service.getDlnaControl().notifyDlnaRenderer(0, 2, ""); // SetCurHandler State OSDHandlerHelper .setHandlerState(CURL_HANDLER_STATE_MULTIMEDIA_CONTROLLER); A4TVMultimediaController .setControlPosition(A4TVMultimediaController.MULTIMEDIA_CONTROLLER_PLAY); ControlProvider.setFlagPlay(false); ControlProvider.setFileDescription("Renderer Pause"); return true; } catch (RemoteException e) { e.printStackTrace(); } } else if (mRendererState == RENDERER_STATE_PLAY_PIP) { Log.d(TAG, "Pause -> PIP"); try { mMediaController.pause(); MainActivity.service.getDlnaControl().notifyDlnaRenderer(0, 2, ""); return true; } catch (RemoteException e) { // TODO Auto-generated catch block e.printStackTrace(); } } else if (mRendererState == RENDERER_STATE_PLAY_PAP) { try { mMediaController.pause(); MainActivity.service.getDlnaControl().notifyDlnaRenderer(0, 2, ""); return true; } catch (RemoteException e) { // TODO Auto-generated catch block e.printStackTrace(); } } return false; } public boolean stop() { if (mRendererState == RENDERER_STATE_PLAY) { // SetCurHandler State A4TVMultimediaController .setControlPosition(A4TVMultimediaController.MULTIMEDIA_CONTROLLER_STOP); ControlProvider.setFlagPlay(false); ControlProvider.setFileDescription("Renderer Stop"); OSDHandlerHelper.setHandlerState(CURL_HANDLER_STATE_DO_NOTHING); // Set Key Listener State MainKeyListener.setAppState(MainKeyListener.CLEAN_SCREEN); if (EXTENSIONS_IMAGE.contains(mMime)) { try { MainActivity.service.getDlnaControl().notifyDlnaRenderer(0, 0, ""); } catch (RemoteException e) { e.printStackTrace(); } } else if (EXTENSIONS_AUDIO.contains(mMime)) { startAsyncTask(ASYNC_STOP); } else if (EXTENSIONS_VIDEO.contains(mMime)) { startAsyncTask(ASYNC_STOP); } mHandler.sendEmptyMessage(RENDERER_STOP); mMediaController.stop(0); mMediaController.startLiveStream(true); // Set Renderer State mRendererState = RENDERER_STATE_STOP; return true; } else if (mRendererState == RENDERER_STATE_PLAY_PIP) { if (EXTENSIONS_VIDEO.contains(mMime)) { startAsyncTask(ASYNC_STOP); } mMediaController.stop(1); mRendererState = RENDERER_STATE_STOP; return true; } else if (mRendererState == RENDERER_STATE_PLAY_PAP) { if (EXTENSIONS_VIDEO.contains(mMime)) { startAsyncTask(ASYNC_STOP); } mMediaController.stop(2); mRendererState = RENDERER_STATE_STOP; return true; } return false; } public boolean resume() { if (mRendererState == RENDERER_STATE_PLAY) { Log.d(TAG, "Resume -> MAIN"); try { mMediaController.resume(); MainActivity.service.getDlnaControl().notifyDlnaRenderer(0, 1, ""); // SetCurHandler State OSDHandlerHelper .setHandlerState(CURL_HANDLER_STATE_MULTIMEDIA_CONTROLLER); A4TVMultimediaController .setControlPosition(A4TVMultimediaController.MULTIMEDIA_CONTROLLER_PLAY); ControlProvider.setFlagPlay(true); ControlProvider.setFileDescription((mActivity) .getApplicationContext().getString( R.string.dlna_renderer_play)); // Show Info() ((MainActivity) mActivity).getPageCurl().multimediaController( false); return true; } catch (Exception e) { Log.e(TAG, "NotifyDlnaRenderer", e); } } else if (mRendererState == RENDERER_STATE_PLAY_PIP) { Log.d(TAG, "Resume -> PIP"); try { mMediaController.resume(); MainActivity.service.getDlnaControl().notifyDlnaRenderer(0, 1, ""); return true; } catch (RemoteException e) { // TODO Auto-generated catch block e.printStackTrace(); } } else if (mRendererState == RENDERER_STATE_PLAY_PAP) { Log.d(TAG, "Resume -> PIP"); try { mMediaController.resume(); MainActivity.service.getDlnaControl().notifyDlnaRenderer(0, 1, ""); return true; } catch (RemoteException e) { // TODO Auto-generated catch block e.printStackTrace(); } } return false; } // milliseconds public boolean seekTo(int milliseconds) { if (mRendererState == RENDERER_STATE_PLAY) { try { mMediaController.seekTo(milliseconds); MainActivity.service.getDlnaControl().notifyDlnaRenderer(0, 1, ""); // SetCurHandler State OSDHandlerHelper .setHandlerState(CURL_HANDLER_STATE_MULTIMEDIA_CONTROLLER); A4TVMultimediaController .setControlPosition(A4TVMultimediaController.MULTIMEDIA_CONTROLLER_FF_NEXT); ControlProvider.setFlagPlay(true); // Show Info() ((MainActivity) mActivity).getPageCurl().multimediaController( false); return true; } catch (Exception e) { Log.e(TAG, "NotifyDlnaRenderer", e); } } else if (mRendererState == RENDERER_STATE_PLAY_PIP) { try { mMediaController.seekTo(milliseconds); MainActivity.service.getDlnaControl().notifyDlnaRenderer(0, 1, ""); return true; } catch (RemoteException e) { // TODO Auto-generated catch block e.printStackTrace(); } } else if (mRendererState == RENDERER_STATE_PLAY_PAP) { try { mMediaController.seekTo(milliseconds); MainActivity.service.getDlnaControl().notifyDlnaRenderer(0, 1, ""); return true; } catch (RemoteException e) { // TODO Auto-generated catch block e.printStackTrace(); } } return false; } public boolean setElapsedTime() { String sTime; int iTime = 0; if (mRendererState == RENDERER_STATE_PLAY) { iTime = mMediaController.getElapsedTime() / 1000; } else if (mRendererState == RENDERER_STATE_PLAY_PIP) { iTime = mMediaController.getElapsedTime() / 1000; } else if (mRendererState == RENDERER_STATE_PLAY_PAP) { iTime = mMediaController.getElapsedTime() / 1000; } sTime = String.format("%02d:%02d:%02d", (iTime / 3600) % 24, (iTime / 60) % 60, iTime % 60); Log.i(TAG, "Time is: " + sTime); try { MainActivity.service.getDlnaControl().notifyDlnaRenderer(3, 0, sTime); } catch (Exception e) { Log.e(TAG, "NotifyDlnaRenderer", e); return false; } return true; } public boolean onCompletion() { if (mRendererState == RENDERER_STATE_PLAY) { try { // SetCurHandler State OSDHandlerHelper.setHandlerState(CURL_HANDLER_STATE_DO_NOTHING); A4TVMultimediaController .setControlPosition(A4TVMultimediaController.MULTIMEDIA_CONTROLLER_STOP); ControlProvider.setFlagPlay(false); ControlProvider.setFileDescription("Renderer Stop"); mHandler.sendEmptyMessage(RENDERER_STOP); mMediaController.stop(0); mMediaController.startLiveStream(true); MainActivity.service.getDlnaControl().notifyDlnaRenderer(0, 0, ""); // Set Renderer State mRendererState = RENDERER_STATE_STOP; return true; } catch (RemoteException e) { e.printStackTrace(); } } else if (mRendererState == RENDERER_STATE_PLAY_PIP) { try { // MainActivity.activity.getPiPView().stop(); MainActivity.service.getDlnaControl().notifyDlnaRenderer(0, 0, ""); // Set Renderer State mRendererState = RENDERER_STATE_STOP; return true; } catch (RemoteException e) { // TODO Auto-generated catch block e.printStackTrace(); } } setOnCompletition(true); return false; } // Work with UI private Handler mHandler = new Handler() { public void handleMessage(android.os.Message msg) { initMultimediaHandler(); // Play Video if (msg.what == RENDERER_VIDEO) { // Hide all if it is video mMultimediaHandler.getMusicFromDlnaLayout().setVisibility( View.GONE); // Hide other layouts (mActivity).findViewById(R.id.linLayMessages).setVisibility( View.GONE); // Play Audio } else if (msg.what == RENDERER_AUDIO) { // Show music icon mMultimediaHandler.getMusicFromDlnaLayout().setVisibility( View.VISIBLE); // Hide other layouts (mActivity).findViewById(R.id.linLayMessages).setVisibility( View.GONE); // Play Image } else if (msg.what == RENDERER_IMAGE) { new LoadImageTask(mFilePath, mFriendlyName).execute(); // Stop } else if (msg.what == RENDERER_STOP) { // Hide music from dlna message (mActivity).findViewById( com.iwedia.gui.R.id.musicReproductionFromDlnaLayout) .setVisibility(View.GONE); // Hide multimedia show dialog mMultimediaHandler.closeMultimediaShow(); // try { // when dlna turn off check for service type // IServiceListControl servControl = MainActivity.service // .getServiceListControl(); // just init service type // checkServiceType = new CheckServiceType((MainActivity) // mActivity); // // int currentActiveIndex = servControl.getServiceList(0) // .getActiveServiceIndex(); // // int activeSignalType = servControl // .getServiceList(0) // .getServiceFromServiceList(0, currentActiveIndex, // false).getDigitalSourceType(); // int activeServiceType = servControl // .getServiceList(0) // .getServiceFromServiceList(0, currentActiveIndex, // false).getServiceType(); // if (servControl.getServiceList(0).getServicesNumber( // activeSignalType, activeServiceType) > 0) { // CheckServiceType // .checkService( // servControl // .getServiceList(0) // .getService( // servControl // .getServiceList( // 0) // .getActiveServiceIndex()), // true); // } // } catch (RemoteException e) { // e.printStackTrace(); // } } } }; private void initProgressDialog() { // Create progress dialog for loading data from DLNA controller mProgressDialog = new A4TVProgressDialog(mActivity); mProgressDialog.setTitleOfAlertDialog(R.string.loading_data); mProgressDialog.setCancelable(false); mProgressDialog.setMessage(R.string.please_wait); } /** Init Multimedia Handler */ private void initMultimediaHandler() { if (mMultimediaHandler == null) { ((MainActivity) mActivity).initMultimediaHandler(); mMultimediaHandler = ((MainActivity) mActivity) .getMultimediaHandler(); } } /** Async Task for loading data */ private class LoadImageTask extends AsyncTask<Void, Void, Boolean> { /** Image url */ private String imageUrl; private String imageName; private Bitmap multimediaImage; public LoadImageTask(String imageUrl, String imageName) { super(); this.imageUrl = imageUrl; this.imageName = imageName; } @Override protected void onPreExecute() { mProgressDialog.show(); super.onPreExecute(); } @Override protected Boolean doInBackground(Void... params) { // ///////////////////////////// // DLNA image // ///////////////////////////// InputStream is = null; try { is = new URL(imageUrl).openConnection().getInputStream(); } catch (MalformedURLException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } // Decode image and scale it if (is != null) { multimediaImage = MultimediaShowHandler .scaleImage(BitmapFactory.decodeStream(is)); try { is.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } return null; } protected void onPostExecute(Boolean result) { initMultimediaHandler(); // Set image mMultimediaHandler.getMultimediaShowHandler().setImage( multimediaImage); // Set image name mMultimediaHandler.getMultimediaShowHandler().setImageName( imageName); // Show multimedia show dialog mMultimediaHandler.showMultimediaShow(); // Hide navigation buttons mMultimediaHandler.getMultimediaShowHandler() .hideNavigationArrows(); // Hide progress dialog mProgressDialog.dismiss(); } }; public int getmRendererState() { return mRendererState; } public boolean setmRendererState(int state) { mRendererState = state; return true; } /** * Get Extension From FilePath * * @param filePath * - File Path or URL * @return Extension */ // private String getExtension(String filePath) { // int index = filePath.lastIndexOf('.'); // if (index == -1 || (index == (filePath.length() - 1))) { // return ""; // } else { // if (filePath.substring(index + 1).toLowerCase().contains("?")) // return filePath.substring(index + 1, filePath.indexOf('?')); // else // return filePath.substring(index + 1).toLowerCase(); // } // // } private void startAsyncTask(int flag) { if (asyncWaitForPlayback != null) { WaitForPlayback tmpWaitForPlayback = asyncWaitForPlayback; asyncWaitForPlayback = null; tmpWaitForPlayback.cancel(true); } asyncWaitForPlayback = new WaitForPlayback(flag); asyncWaitForPlayback.execute(null, null, null); } /** Async Task for playback start */ private class WaitForPlayback extends AsyncTask<Void, Void, Void> { private int flagPlay = -1; public WaitForPlayback(int flag) { this.flagPlay = flag; } @Override protected Void doInBackground(Void... params) { if (flagPlay == ASYNC_PLAY) { if (mRendererState == RENDERER_STATE_PLAY) { while (!mMediaController.isPlaying()) { // Log.i("DoInBack", "WhileLoop: isPlaying = false"); if (flagOnCompletition) { flagPlay = ASYNC_STOP; return null; } } } else if (mRendererState == RENDERER_STATE_PLAY_PIP) { while (!MainActivity.activity .getPrimaryMultimediaVideoView().isPlaying()) { // Log.i("DoInBack", "WhileLoop: isPlaying = false"); if (flagOnCompletition) { flagPlay = ASYNC_STOP; return null; } } } else if (mRendererState == RENDERER_STATE_PLAY_PAP) { while (!MainActivity.activity .getPrimaryMultimediaVideoView().isPlaying()) { // Log.i("DoInBack", "WhileLoop: isPlaying = false"); if (flagOnCompletition) { flagPlay = ASYNC_STOP; return null; } } } } else if (flagPlay == ASYNC_STOP) { if (mRendererState == RENDERER_STATE_PLAY) { while (mMediaController.isPlaying()) { // Log.i("DoInBack", // "WhileLoop: isPlaying = true RENDERER_STATE_PLAY"); } } else if (mRendererState == RENDERER_STATE_PLAY_PIP) { while (MainActivity.activity .getPrimaryMultimediaVideoView().isPlaying()) { // Log.i("DoInBack", // "WhileLoop: isPlaying = true RENDERER_STATE_PLAY_PIP"); } } else if (mRendererState == RENDERER_STATE_PLAY_PAP) { while (MainActivity.activity .getPrimaryMultimediaVideoView().isPlaying()) { // Log.i("DoInBack", // "WhileLoop: isPlaying = true RENDERER_STATE_PLAY_PIP"); } } } return null; } @Override protected void onPostExecute(Void result) { try { if (flagPlay == ASYNC_PLAY) { MainActivity.service.getDlnaControl().notifyDlnaRenderer(0, 1, ""); } else if (flagPlay == ASYNC_STOP) { MainActivity.service.getDlnaControl().notifyDlnaRenderer(0, 0, ""); } } catch (RemoteException e) { e.printStackTrace(); } super.onPostExecute(result); } } private Handler mDialogHandler = new Handler(); public void showDialog(final boolean isVideo) { mDialogHandler.postDelayed(new Runnable() { @Override public void run() { dialogContext = MainActivity.activity.getDialogManager() .getContextSmallDialog(); // Show dialog for adding in favorite list // fill dialog with desired view if (dialogContext != null) { dialogContext .setContentView(fillDialogWithElements(isVideo)); dialogContext .setOnCancelListener(new DialogInterface.OnCancelListener() { @Override public void onCancel(DialogInterface dialog) { try { MainActivity.service.getDlnaControl() .notifyDlnaRenderer(0, 0, ""); } catch (RemoteException e) { e.printStackTrace(); } // Close context dialog dialogContext.cancel(); } }); // set dialog size dialogContext.getWindow().getAttributes().width = MainActivity.dialogWidth / 2; dialogContext.getWindow().getAttributes().height = MainActivity.dialogHeight / 2; // show drop down dialog dialogContext.show(); } } }, 100); } /** * Creates view for context dialog * * @return */ private View fillDialogWithElements(boolean isVideo) { LinearLayout mainLinLayout = new LinearLayout(mActivity); mainLinLayout.setLayoutParams(new LayoutParams( LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); mainLinLayout.setOrientation(LinearLayout.VERTICAL); // get drawable from theme for image source TypedArray atts = mActivity.getTheme().obtainStyledAttributes( new int[] { R.attr.DialogContextBackground }); int backgroundID = atts.getResourceId(0, 0); atts.recycle(); mainLinLayout.setBackgroundResource(backgroundID); // layout of dialog title LinearLayout titleLinearLayout = new LinearLayout(mActivity); titleLinearLayout.setLayoutParams(new LinearLayout.LayoutParams( LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)); titleLinearLayout.setOrientation(LinearLayout.VERTICAL); titleLinearLayout.setPadding( (int) mActivity.getResources().getDimension( R.dimen.a4tvdialog_padding_left), (int) mActivity.getResources().getDimension( R.dimen.a4tvdialog_spinner_padding_top), 0, 0); A4TVTextView text = new A4TVTextView(mActivity, null); text.setLayoutParams(new LinearLayout.LayoutParams( LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); /** Set text */ text.setText("Play file " + mFriendlyName + "?"); text.setTextSize(mActivity.getResources().getDimension( R.dimen.a4tvdialog_textview_size)); // add title titleLinearLayout.addView(text); // add title layout to main layout mainLinLayout.addView(titleLinearLayout); // create horizontal line ImageView horizLine = new ImageView(mActivity); horizLine.setLayoutParams(new LinearLayout.LayoutParams( android.widget.LinearLayout.LayoutParams.MATCH_PARENT, android.widget.LinearLayout.LayoutParams.WRAP_CONTENT)); // get drawable from theme for image source atts = mActivity.getTheme().obtainStyledAttributes( new int[] { R.attr.DialogSmallUpperDividerLine }); backgroundID = atts.getResourceId(0, 0); horizLine.setBackgroundResource(backgroundID); // add horiz line to main layout mainLinLayout.addView(horizLine); // create scroll view ScrollView mainScrollView = new ScrollView(mActivity); mainScrollView.setLayoutParams(new LinearLayout.LayoutParams( LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)); // add scrollview to main view mainLinLayout.addView(mainScrollView); LinearLayout contentLinearLayout = new LinearLayout(mActivity); contentLinearLayout.setLayoutParams(new ScrollView.LayoutParams( LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); contentLinearLayout.setOrientation(LinearLayout.VERTICAL); contentLinearLayout.setGravity(Gravity.CENTER_HORIZONTAL | Gravity.TOP); // add content layout to scroll view mainScrollView.addView(contentLinearLayout); /** GET FIELDS FOR CREATING DROP DOWN ITEMS */ String[] strings; if (isVideo) { strings = mActivity.getResources().getStringArray( R.array.renderer_video_play_mode_dropdown); } else { strings = mActivity.getResources().getStringArray( R.array.renderer_play_mode_dropdown); } for (int i = 0; i < strings.length; i++) { // create small layout final LinearLayout smallLayoutHorizontal = new LinearLayout( mActivity); smallLayoutHorizontal.setOrientation(LinearLayout.HORIZONTAL); smallLayoutHorizontal .setLayoutParams(new LinearLayout.LayoutParams( LayoutParams.MATCH_PARENT, MainActivity.dialogListElementHeight)); smallLayoutHorizontal.setPadding(15, 5, 15, 5); smallLayoutHorizontal.setGravity(Gravity.CENTER_VERTICAL); // create drop box item A4TVButton button = new A4TVButton(mActivity, null); button.setLayoutParams(new LinearLayout.LayoutParams( LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); button.setText(strings[i]); button.setGravity(Gravity.CENTER); button.setId(i); // for creating difference between first buttons button.setTag(strings[i]); button.setOnClickListener(new OnClickListener() { @Override public void onClick(View vi) { // //////////////////////////////////////////////////////////////////////////// // do something from dropdown items // //////////////////////////////////////////////////////////////////////////// if (vi.getTag().equals( mActivity.getResources().getString( R.string.play_in_full_screen)) || vi.getTag().equals( mActivity.getResources().getString( R.string.play))) { // /////////////////////////////////// // Play file in full screen // /////////////////////////////////// Log.d(TAG, "Play file in full screen"); // Close context dialog dialogContext.cancel(); if (mFilePath.length() > 1) { // Stop mMediaController.stopLiveStream(); mMediaController.stop(0); mHandler.sendEmptyMessage(RENDERER_STOP); if (EXTENSIONS_IMAGE.contains(mMime)) { mHandler.sendEmptyMessage(RENDERER_IMAGE); try { MainActivity.service.getDlnaControl() .notifyDlnaRenderer(0, 1, ""); } catch (RemoteException e) { e.printStackTrace(); } } else if (EXTENSIONS_AUDIO.contains(mMime)) { mMediaController.play(mFilePath, 0); mHandler.sendEmptyMessage(RENDERER_AUDIO); startAsyncTask(ASYNC_PLAY); } else if (EXTENSIONS_VIDEO.contains(mMime)) { mMediaController.play(mFilePath, 0); mHandler.sendEmptyMessage(RENDERER_VIDEO); startAsyncTask(ASYNC_PLAY); Log.i(TAG, "Play Video!"); } else { Log.i(TAG, "Wrong Extension"); try { MainActivity.service.getDlnaControl() .notifyDlnaRenderer(0, 0, ""); } catch (RemoteException e) { e.printStackTrace(); } mHandler.sendEmptyMessage(RENDERER_STOP); mMediaController.stop(0); mMediaController.startLiveStream(true); // Cancel alert dialog dialogContext.cancel(); Toast.makeText(mActivity, R.string.dlna_renderer_wrong_extension, Toast.LENGTH_SHORT).show(); return; } // Set Renderer State mRendererState = RENDERER_STATE_PLAY; // SetCurHandler State OSDHandlerHelper .setHandlerState(CURL_HANDLER_STATE_MULTIMEDIA_CONTROLLER); A4TVMultimediaController .setControlPosition(A4TVMultimediaController.MULTIMEDIA_CONTROLLER_PLAY); ControlProvider.setFlagPlay(true); ControlProvider.setFileName(mFriendlyName); ControlProvider.setFileDescription("Renderer Play"); // Show Info() ((MainActivity) mActivity).getPageCurl().info(); // Set Key Listener State MainKeyListener .setAppState(MainKeyListener.DLNA_RENDERER); } else { Log.i(TAG, "URI is empty!!!"); try { MainActivity.service.getDlnaControl() .notifyDlnaRenderer(0, 0, ""); } catch (RemoteException e) { e.printStackTrace(); } } } else if (vi.getTag().equals( mActivity.getResources().getString( R.string.play_in_pip))) { // /////////////////////////////////// // Play file in PIP // /////////////////////////////////// Log.d(TAG, "Play file in PIP"); // Toast.makeText(mActivity, // R.string.not_implemented, // Toast.LENGTH_SHORT).show(); // Close context dialog dialogContext.cancel(); if (mFilePath.length() > 1) { if (EXTENSIONS_VIDEO.contains(mMime)) { mMediaController.play(mFilePath, 1); startAsyncTask(ASYNC_PLAY); // Set Renderer State mRendererState = RENDERER_STATE_PLAY_PIP; } } else { Log.i(TAG, "URI is empty!!!"); try { MainActivity.service.getDlnaControl() .notifyDlnaRenderer(0, 0, ""); } catch (RemoteException e) { e.printStackTrace(); } } } else if (vi.getTag().equals( mActivity.getResources().getString( R.string.play_in_pap))) { // /////////////////////////////////// // Play file in PIP // /////////////////////////////////// Log.d(TAG, "Play file in PAP"); // Toast.makeText(mActivity, // R.string.not_implemented, // Toast.LENGTH_SHORT).show(); // Close context dialog dialogContext.cancel(); if (mFilePath.length() > 1) { if (EXTENSIONS_VIDEO.contains(mMime)) { mMediaController.play(mFilePath, 2); startAsyncTask(ASYNC_PLAY); // Set Renderer State mRendererState = RENDERER_STATE_PLAY_PAP; } } else { Log.i(TAG, "URI is empty!!!"); try { MainActivity.service.getDlnaControl() .notifyDlnaRenderer(0, 0, ""); } catch (RemoteException e) { e.printStackTrace(); } } } else if (vi.getTag() .equals(mActivity.getResources().getString( R.string.cancel))) { // /////////////////////////////////// // Reject // /////////////////////////////////// // Close context dialog dialogContext.cancel(); try { MainActivity.service.getDlnaControl() .notifyDlnaRenderer(0, 0, ""); } catch (RemoteException e) { e.printStackTrace(); } } } }); // set focus listener of button button.setOnFocusChangeListener(new OnFocusChangeListener() { @Override public void onFocusChange(View v, boolean hasFocus) { // get drawable from theme for small layout // background TypedArray atts = mActivity.getTheme() .obtainStyledAttributes( new int[] { R.attr.LayoutFocusDrawable }); int backgroundID = atts.getResourceId(0, 0); atts.recycle(); if (hasFocus) { smallLayoutHorizontal.getChildAt(0).setSelected(true); smallLayoutHorizontal .setBackgroundResource(backgroundID); } else { smallLayoutHorizontal.getChildAt(0).setSelected(false); smallLayoutHorizontal .setBackgroundColor(Color.TRANSPARENT); } } }); button.setBackgroundColor(Color.TRANSPARENT); smallLayoutHorizontal.addView(button); // add view contentLinearLayout.addView(smallLayoutHorizontal); if (i < strings.length - 1) { // create horizontal line ImageView horizLineSmall = new ImageView(mActivity); android.widget.LinearLayout.LayoutParams params = new LinearLayout.LayoutParams( dialogContext.getWindow().getAttributes().width - 10, android.widget.LinearLayout.LayoutParams.WRAP_CONTENT); params.gravity = Gravity.CENTER_HORIZONTAL; horizLineSmall.setLayoutParams(params); // get drawable from theme for image source atts = mActivity.getTheme().obtainStyledAttributes( new int[] { R.attr.DialogContextDividerLine }); backgroundID = atts.getResourceId(0, 0); horizLineSmall.setImageResource(backgroundID); // add view contentLinearLayout.addView(horizLineSmall); } } return mainLinLayout; } public CheckServiceType getCheckServiceType() { return checkServiceType; } public boolean isPiPMode() { return (mRendererState == RENDERER_STATE_PLAY_PIP) ? true : false; } public static void setOnCompletition(boolean flag) { RendererController.flagOnCompletition = flag; } }